Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Total7zip
Goto page Previous  1, 2, 3 ... 5, 6, 7 ... 63, 64, 65  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Thu Dec 02, 2010 21:47    Post subject: Reply with quote

Reflector wrote:
7zG.exe запускается почти сразу, т.е. можно начать упаковку когда список еще не готов...
По идее, 7zG нельзя запустить до того как список готов. Раз запускается, значит, в этот момент список уже готов. А почему блокируется тотал - это уже вопрос.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Reflector



Joined: 29 Nov 2009
Posts: 56

Post (Separately) Posted: Thu Dec 02, 2010 21:54    Post subject: Reply with quote

MVV wrote:

По идее, 7zG нельзя запустить до того как список готов. Раз запускается, значит, в этот момент список уже готов. А почему блокируется тотал - это уже вопрос.

Раз запускается сразу, значит не ждет окончания построения списка, т.к. тотал только размер той папки считает 4 сек Smile
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Thu Dec 02, 2010 21:59    Post subject: Reply with quote

Архиватору нужно передавать полностью построенный список. Возможности подкинуть еще файлов для упаковки нет. Поэтому невозможно запустить 7zG до окончания формирования списка.

Проверил сейчас на папке Windows от семерки. Примерно 24 секунды строился список файлов. Потом в списке процессов появился 7zG, потом прошло еще секунд 14, в тотале исчез диалог упаковки, прошло еще несколько секунд - и появился диалог создания архива. Видимо, эти 14 секунд архиватор что-то упорно грузит, и система ждет. При запуске любой программы тот, кто ее запускает, вынужден некоторое время ждать, нельзя спустить сразу. Но, думаю, если передать инициативу фоновому потоку - можно будет закрыть окно упаковки сразу. Т.е. просто строим список файлов, создаем фоновый поток и передаем ему путь к списку файлов и флаги - и всё, забываем о нем, он сам запускает архиватор и удаляет список файлов по завершении.

Кстати, тут еще вопрос, кто больше тормозит - тотал или плагин. Тоталу ведь надо построить список файлов, который передать плагину - а если в папке 56 тыщ файлов, на это нужно время.

Еще можно время от времени вызывать функцию прогресса, чтобы юзер видел, какой файл обрабатывается - допустим, можно не на каждый файл, если их много, а на каждый десятый и т.п., чтоб интерфейс не сильно тормозил процесс. Например, пока файлов меньше 100, пишем на каждый файл, потом до 1000 на каждый 5-й, потом - на каждый 10-й.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…


Last edited by MVV on Thu Dec 02, 2010 23:49; edited 6 times in total
Back to top
View user's profile Send private message
Reflector



Joined: 29 Nov 2009
Posts: 56

Post (Separately) Posted: Thu Dec 02, 2010 22:05    Post subject: Reply with quote

MVV wrote:

Архиватору нужно передавать полностью построенный список. Возможности подкинуть еще файлов для упаковки нет. Поэтому невозможно запустить 7zG до окончания формирования списка.

А я о чем говорю? Запакуются только те файлы, которые на тот момент были с списке... Тебя послушать, так невозможно писать программы с ошибками Smile
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Thu Dec 02, 2010 22:22    Post subject: Reply with quote

Кстати, плагин использует не файл списка, а ту же хитрую методику, как и расширение оболочки - возможно, она позволяет строить список файлов на лету, я не знаю.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
mrmerak



Joined: 20 Aug 2007
Posts: 441

Post (Separately) Posted: Fri Dec 03, 2010 09:34    Post subject: Reply with quote

От блин. Уже обрадовался и думал качать, но потом прочитал коменты от MVV и Reflector... Confused
_________________
TC 9.51 | Win10 1903
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Fri Dec 03, 2010 10:33    Post subject: Reply with quote

что-то не так в этих комментах...
наверное то, что долго запускается диалог архивации, если для упаковки выбрать папку размером в несколько гигабайт?

тут все зависит от того как такое обрабатывать -
можно попросить чашку кофе, а можно прийти в кафе со списком нужных вам молекул.
можно сказать что надо запаковать такую-то папку. а можно просканировать ее и составить список всех файлов. можно дать список в удобном формате а можно в извращенном.

тотал идет по "простому" второму пути. и получается, что например у меня в папке Windows на 64-битной Win7
15,6 GB и 96 283 Files, 21 346 Folders
пути хранятся как правило в строках, длинной MAX_PATH, это 255 символов по 2 байта. Тут я беру минимум, потому что на самом деле тотал, всегда когда дает пути к файлам в Unicode использует 1024 символа.
итого:
1)96 283 + 21 346 = 117629 (файлов и папок)
2)117629 * 256 * 2 = 60226048 (длина списка в байтах)
то есть тотал готовит для плагина список, размером приблизительно
60 МЕГАБАЙТ. (если считать по 1024 символа, то умножте размер обрабатываемой тоталом информации на 4). причем основные тормоза тут в файловой системе, так как это не просто строки а имена файлов, которые надо еще и получить.
3)дальше тотал передает этот "чудо" список не массивом указателей, а одной длинной строкой "сосиской", неизвестной длины. и чтоб разобрать его надо идти символ за символом -
если встретился 0, то это конец имени, после него начало следующего.
если начало следующего тоже 0, то список кончился.

я попробую оптимизировать с того места, когда начинает работать мой код, но по-моему сам метод порочный.

вывод - не надо упаковывать гигантские папки с помощью плагинов тотал коммандера. =)
Back to top
View user's profile Send private message
mrmerak



Joined: 20 Aug 2007
Posts: 441

Post (Separately) Posted: Fri Dec 03, 2010 11:35    Post subject: Reply with quote

Total7zip
Quote:
вывод - не надо упаковывать гигантские папки с помощью плагинов тотал коммандера. =)

вот с прошлым плагом была такая ж беда Sad Приходилось для таких целей юзать обычный 7з через контекстное меню.
А хотелось бы по-крутому: закинуть 7z.dll и 7zG.exe - и не ставить каждый раз сам 7з
_________________
TC 9.51 | Win10 1903
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Fri Dec 03, 2010 12:06    Post subject: Reply with quote

я поищу обходные пути.
как мимнимум, для начала я могу "отпустить" тотал в тот момент когда он передал мне список, не дожидаясь запуска 7zG. тогда зависание не будет таким долгим.

возможно вариант с кнопкой на тулбаре будет работать быстро.
вот из хэлпа тотала
Code:

%N places the filename under the cursor into the command line.
%T inserts the current target path. Especially useful for packers.

надо попробовать. только не знаю как там с unicode именами дело обстоит.

но я все равно сделаю в плагине упаковку, изменение и удаление из архивов. на обычных папках, по-моему производительность нормальная.
Back to top
View user's profile Send private message
Reflector



Joined: 29 Nov 2009
Posts: 56

Post (Separately) Posted: Fri Dec 03, 2010 14:29    Post subject: Reply with quote

Total7zip wrote:

вывод - не надо упаковывать гигантские папки с помощью плагинов тотал коммандера. =)

Вот смотри, я даю паковать папку Win7 твоему плагину, через 7 сек в процессах появляется 7zG.exe, через 40 сек он появляется в панели задач(может вчера у меня запускался 7zG от предыдущих паковок когда я начинал следующие? Smile) Затем я переключаюсь на свой плагин и 7zG начинает паковать уже на 6-й сек, потому что список, который он получает, состоит из одной строки "Windows". Я же писал в начале, что 7z не любит большие списки, а его упрощение операция довольно быстрая...
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Fri Dec 03, 2010 14:48    Post subject: Reply with quote

Quote:
3)дальше тотал передает этот "чудо" список не массивом указателей, а одной длинной строкой "сосиской", неизвестной длины. и чтоб разобрать его надо идти символ за символом -
если встретился 0, то это конец имени, после него начало следующего.
если начало следующего тоже 0, то список кончился.
Зато поддерживаются списки исключений, скрытые файлы и прочие "фишки" тотала.

Согласен, неизвестная длина - это проблема. Но по идее здесь нужно лишь писать в файл символ за символом, а на каждом нулевом байте записывать в файл символ конца строки, а на паре нулевых - закрыть файл и передать его архиватору. Хотя, конечно, если используется не файл, а блок памяти, то всё сложнее, т.к. заранее определить необходимый размер блока невозможно. Но тут можно сделать всё в 2 прохода - за первый построить массив указателей на имена и длин (длины все равно понадобятся, как и указатели), заодно по ходу посчитав суммарную длину, а за второй - сделать остальную часть работы.

Все равно, думаю, больше по времени займет у самого тотала составление такого списка. Ведь ему придется перечислить содержимое всех выделенных директорий, по ходу дела фильтруя элементы, и при этом сохранить всё в памяти - и опять же, он не знает заранее, буфер какого размера ему понадобится, т.е. имеет проблему посерьезнее.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Reflector



Joined: 29 Nov 2009
Posts: 56

Post (Separately) Posted: Fri Dec 03, 2010 15:33    Post subject: Reply with quote

MVV wrote:

Зато поддерживаются списки исключений, скрытые файлы и прочие "фишки" тотала.

Я все не мог понять причем тут списки исключений... Если ты пакуешь папку со скрытыми файлами, то они все окажутся в архиве, а если ты пакуешь zipом папку с файлами присутствующими в списке исключений, то они исключаются, т.е. если список исключений у вас не пуст, то нет никаких гарантий, что вы получите архив с оригинальными файлами. Вот что, по-твоему, можно прописать в этот список, чтобы оно случайно не исключилось из какого-нибудь архива? Примечательно то, что если паковать в tar или rar, то тотал передает им все файлы, даже если если они есть в списке исключений. Короче мне кажется, что паковать нужно все, иначе это будет лотерея...
Back to top
View user's profile Send private message
Reflector



Joined: 29 Nov 2009
Posts: 56

Post (Separately) Posted: Fri Dec 03, 2010 15:36    Post subject: Reply with quote

MVV wrote:

Все равно, думаю, больше по времени займет у самого тотала составление такого списка.

Я же написал, что у меня построение + перестроение списка занимает 6 сек.
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Fri Dec 03, 2010 15:40    Post subject: Reply with quote

Reflector wrote:
Я же писал в начале, что 7z не любит большие списки, а его упрощение операция довольно быстрая...

если можно, то расскажите как упростить список.
по-моему эта задача решения не имеет.
дано: список из N файлов и папок. например все они из Windows.
нужно: догадаться что этот список равен Windows\*

а вдруг в папке Windows на самом деле N+M файлов?...
по-моему "упростить" можно только одним способом -
найти общий корень, получить самому список всего что там есть и сравнить списки.

если у вас другое решение - с удовольствием воспользуюсь.


MVV wrote:

Все равно, думаю, больше по времени займет у самого тотала составление такого списка. Ведь ему придется перечислить содержимое всех выделенных директорий, по ходу дела фильтруя элементы, и при этом сохранить всё в памяти - и опять же, он не знает заранее, буфер какого размера ему понадобится, т.е. имеет проблему посерьезнее.

я даже добавлю, что я посмотрел из-за чего тормозит потом 7zG.
он идет по этому огромному списку файлов и проверяет каждую строчку как МАСКУ. так что тормоза включены на полную с обеих сторон.
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Fri Dec 03, 2010 15:45    Post subject: Reply with quote

Reflector wrote:
паковать нужно все, иначе это будет лотерея...

согласен, я то же самое думаю про команду MOVE.
удалять можно только то, что гарантировано попало в архив.
если буду делать эту фичу, то только так -
запаковали,
дальше идем по списку - если файл есть в новом архиве, удаляем исходник. пранойя, конечно, но это лучше чем просто удалить весь список, а потом узнать что у 7zG изменились коды возвращаемых значений =)
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 5, 6, 7 ... 63, 64, 65  Next
Page 6 of 65

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group