Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 | 5 |

 

  Вопрос: Выношу на суд. Добавлено: 01.03.09 09:40  

Автор вопроса:  Smith | Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой. | ICQ: ненавижу 

Ответить

  Ответы Всего ответов: 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
FSO подсчитывая размер папки наверняка использует апи,

разумеется 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
EROS пишет:
размер тут не играет никакой роли!!

Может сыграть, хотя и не часто встречаются пустые файлы, но в папке 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
Smith пишет:
Хотя возможно я ошибаюсь, и эта фишка просто результат работы драйвера/кэша или чего-то там ещё в системе )

Скорее это системное кеширование. Я сомневаюсь что в 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 пишет:
Понимаю, что это далеко не оптимально, ну попробую представить идеальный алгоритм, хотя и с трудом )


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

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

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

Ответить

Номер ответа: 30
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #30 Добавлено: 02.03.09 06:47
Со всем согласен кроме одного, для меня размер предмет гордости и имеет весомое значение :)
А если без пошлостей, то просто, это личное имхо каждого, нужны ему пустые файлы или нет.
Для меня то, что в папке формально есть файлы это не катит, если файлы не весят нифига, то грош им цена, папка с пустышками должна считаться пустой.

Ответить

Страница: 1 | 2 | 3 | 4 | 5 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам