Страница: 1 | 2 | 3 | 4 | 5 |
Вопрос: Выношу на суд.
Добавлено: 01.03.09 09:40
Автор вопроса: Smith | Web-сайт:
Ответы
Всего ответов: 61
Номер ответа: 16
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #16
Добавлено: 02.03.09 05:40
Именно безценный, хотя я ещё не представляю себе принцип предлагаемого Вами быстрого алгоритма, но мне и внимание важно.
Номер ответа: 17
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #17
Добавлено: 02.03.09 05:44
Из практики я знаю, что FSO тратит время на подсчет размера папки только один раз за всё время жизни копии.
Уже одно это заставляет меня усомниться в реальности более быстрого алгоритма.
Номер ответа: 18
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #18
Добавлено: 02.03.09 05:46
Хотя возможно я ошибаюсь, и эта фишка просто результат работы драйвера/кэша или чего-то там ещё в системе )
Номер ответа: 19
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #19
Добавлено: 02.03.09 05:47
разумеется API, но ты должен понимать, чтобы получить размер папки они используют точно такую же рекурсию как и ты!! Они точно так же как и ты перебирают все вложенные папки и файлы и для каждого из них получают размер, потом его суммируют и выдают тебе готовый результат.. А теперь постарайся вдуматься и понять СКОЛЬКО ненужных действий при этом выполняется! Ведь перед тобой стоит тривиальная задача: узнать пустая папка или нет.. размер тут не играет никакой роли!!
Номер ответа: 20
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #20
Добавлено: 02.03.09 05:55
Эх... Знаю что за то что я сейчас скажу, Executioner взломает мой комп, поставит кучу троянов и зальет терабайт камасутры, но по секрету скажу что видел его программу, написанную на VB6, которая работает в многопоточности! (я этого не говорил!)
Номер ответа: 21
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #21
Добавлено: 02.03.09 06:02
Допустим в корне 3 папки
в каждой из них по 2 подпапки
последняя подпапка в каждой папке пуста.
1 Я спрашиваю у ФСО размер корня, он подсчитывает и складывает размеры всех трех папок.
2 мой запрос на размер первой папки, тут происходит повторный(лишний) подсчет её размера.
3 мой запрос на первую подпапку в первой папке, ещё один повторный подсчет размера.
4 мой запрос на вторую подпапку, третий лишний подсчет размера, ну наконец найдена первая пустая Корень\1Папка\2Подпапка
Я понимаю, что уже в результате первого запроса FSO прошел все пустые/непустые папки/подпапки/и т.д., но вернул мне именно то, что я запросил т.е. размер корня
Понимаю, что это далеко не оптимально, ну попробую представить идеальный алгоритм, хотя и с трудом )
Номер ответа: 22
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #22
Добавлено: 02.03.09 06:06
Brand, это ты о его примерчике мультитрединга на ВБ6 для митуя?
Я тоже его видел, пример был полон неожиданностей.
Номер ответа: 23
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #23
Добавлено: 02.03.09 06:10
размер тут не играет никакой роли!!
Может сыграть, хотя и не часто встречаются пустые файлы, но в папке Downloads бывает и такое.
И как определить ценность файла если не проверять его размер? Да я знаю, что именно эта самая длительная операция.
Номер ответа: 24
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #24
Добавлено: 02.03.09 06:16
имхо.. если в папке есть файл пусть даже и пустой, то сама папка уже не пустая! И пустыми файлами в данном случае можно принебречь..
Номер ответа: 25
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #25
Добавлено: 02.03.09 06:17
Оптимальная реализация на АПИ будет полюбому ощутимо быстрее чем предложенная Smith'ом.
Но проблема не в том что FSO тормозной и в нем куча лишних вызовов, EROS! Вот ты говоришь что там якобы выполняется аж СКОЛЬКО ненужных действий. Да сколько бы там действий не выполнялось, все равно все упирается в скорость вращения блинов. Ты хоть на машинном коде это все напиши - выиграешь мизер.
Проблема здесь совсем в другом - в FSO нет тех функций, которые нужны в данной задаче.
А конкретно здесь нужны 2 функции. Первая - получить список поддиректорий. Вторая - проверить, есть ли хотя бы один файл в дирректории.
И первое, и второе делается через АПИ FindFirstFile/FindNextFile. Причем можно совместить оба цикла (поиск хотя бы одного файла и поиск поддиректорий) в один. За счет этого и получится выигрыш, как минимум двухкратный по сравнению с самой оптимальной реализацией на FSO.
Но еще раз хочу отметить - эта разница не потому что FSO плохой а АПИ хороший. А исключительно из-за дизайна FSO.
Номер ответа: 26
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #26
Добавлено: 02.03.09 06:18
сорри..
может для меня важен не сам файл а его название!
так что я считаю, что если файл есть - значит папка не пустая
Номер ответа: 27
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #27
Добавлено: 02.03.09 06:22
Хотя возможно я ошибаюсь, и эта фишка просто результат работы драйвера/кэша или чего-то там ещё в системе )
Скорее это системное кеширование. Я сомневаюсь что в FSO реализовано какое-то подобие кеширования. Хотя стоит конечно посмотреть исходный код FSO, или проверить какие вызовы он делает, но я уверен что ни о каком кешировании в 90-х не заморачивались
Номер ответа: 28
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #28
Добавлено: 02.03.09 06:23
EROS, полностью согласен. РАЗМЕР НЕ ИМЕЕТ ЗНАЧЕНИЯ!
Номер ответа: 29
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #29
Добавлено: 02.03.09 06:30
Понимаю, что это далеко не оптимально, ну попробую представить идеальный алгоритм, хотя и с трудом )
Smith, главное в твоем случае - это минимизировать операции с диском.
По каждой директории проходить строго по одному разу, сохранять результаты в памяти для использования в дальнейшем.
Например, проходишь самую "нижнюю" дирректорю - сохраняешь кол-во файлов в ней, которое будет использоваться при обработке дирректорий более высокого уровня.
В принципе, алгоритм здесь довольно тривиальный, но это пример случая, когда нужно четко понимать как на нижнем уровне работают компоненты, которые используются.
Номер ответа: 30
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #30
Добавлено: 02.03.09 06:47
Со всем согласен кроме одного, для меня размер предмет гордости и имеет весомое значение
А если без пошлостей, то просто, это личное имхо каждого, нужны ему пустые файлы или нет.
Для меня то, что в папке формально есть файлы это не катит, если файлы не весят нифига, то грош им цена, папка с пустышками должна считаться пустой.