Страница: 1 | 2 |
Вопрос: Как грамотно работать с файлами ?
Добавлено: 05.10.04 13:25
Автор вопроса: avkiev | ICQ: 226072
Ответы
Всего ответов: 23
Номер ответа: 16
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #16
Добавлено: 07.10.04 20:58
avkiev
Я тебе примерно объясню, откуда "скорость" у TotalManager'a, и почему кажется, что он работает жутко быстро.
1. ListView может иметь стиль LVS_OWNERDATA. ListView с таким стилем не хранит все данные о всех файлах. Он посылает по мере необходимости запрос в твою оконную процедуру в виде сообщения LVN_GETDISPINFO.
2. Total Commander не показывает иконки найденых файлов и папок. Т.е. не вызывает SHGetFileInfo
3. Total Commander не находит всех файлов (обычно он находит ок. 70. Видимо не смотрит системные и скрытые файлы.
Вот отсюда и его "скорость".
О SHGetFileInfo:
Это страшный тормоз. 1 вызов (в зависимости от установленных флагов) занимает от 0,3 до 1 мс. Поэтому, если у тебя обычный ListView, который требует сразу занести инфу о всех итемах (включая системный индекс иконки) быстрого поиска ты никогда не получишь.
Какие преимущества даёт LVS_OWNERDATA: Обычно при скролле запрашивается инфа всего о двух итемах, поэтому тормозов нет. При полной перерисовке запрашивается десяток-другой итемов. И всё.
Сравнил три поиска: Прошарить весь диск C:\ (со всеми вложенными папками) на предмет всех файлов и папок.
с LVS_OWNERDATA найдено 33500 файлов. Время поиска 9-12,5 сек (с иконками)(asm)
Виндовый поиск найдено 33500 файлов. Время поиска 33-37 сек (с иконками) (Си++)
Total Commander найдено 21000 файлов. Время поиска 13-17 сек (без иконок) (Delphi)
Перед каждым поиском комп перезагружал и выжидал 30 сек, пока все процессы запустятся и успокоятся.
Повторных запусков не делал, т.к. там уже речь не о поиске а о кешировании. Это другая тема.
А контролы Dir1 и File1 - "за пару секунд", как написал Apache2, смогут просмотреть только текущую папку, не более
Номер ответа: 17
Автор ответа:
avkiev
ICQ: 226072
Вопросов: 48
Ответов: 107
Профиль | | #17
Добавлено: 08.10.04 11:06
2 cresta У меня Тотал и иконки показывает, и все файлы находит. У тебя или старая версия или это отключено в опциях.
Про LVS_OWNERDATA никогда не слышал, пасиб, попробую покопать в этом направлении.
Номер ответа: 18
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #18
Добавлено: 08.10.04 12:46
У Тотала версия 6.01. Насколько знаю, это последняя. Включил отображение системных и скрытых файлов. Где можно включить иконки не нашёл . В общем стал он ещё медленнее, при том что всё-таки опять меньше файлов находит: 31600 нашёл за 20 сек.
Номер ответа: 19
Автор ответа:
avkiev
ICQ: 226072
Вопросов: 48
Ответов: 107
Профиль | | #19
Добавлено: 08.10.04 13:09
Для отображения иконок нужна 32-битная версия.
У меня 6.03a 32 bit (16.4.2004)
Конфигурация - Настройка - Экран - Показ Значков
Этот Тотал, конечно, чуть медленнее Фара (про который мы не говорим ибо Консоль), но такой скорости в своем приложении я был бы очень рад
Номер ответа: 20
Автор ответа:
j3d1
ICQ: 8370005
Вопросов: 34
Ответов: 466
Профиль | | #20
Добавлено: 08.10.04 16:47
//15 я вот щас пишу файловый менджер, он по скорости парсинга по каталагам с сортировкой уступает всего несколько милесекунд( в папках не больще 50 000 файлов)
конечно С++ есть свое приимущество в скорости, потомучто С++ компилятор, а у вб очень мусорный код(?)
Номер ответа: 21
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #21
Добавлено: 08.10.04 22:23
Если ты хочешь быстро, про VB забудь. Даже до Тотала будет далеко, не говоря о чём-то более быстром. Нужна скорость - пиши на Си, асме или хотя бы Делфи.
Номер ответа: 22
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #22
Добавлено: 09.10.04 03:04
Не сказал бы что FAR какой то особо суперскоростной. У меня например Window'ый поиск чуть быстрее работает.
Номер ответа: 23
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #23
Добавлено: 09.10.04 11:38
Фар он вооюще ниче не отображает, дык с чего бы ему быть медленней