COM DLL - значок наложения - PullRequest
1 голос
/ 24 июня 2010

Я создал COM DLL, чтобы применить значок наложения для файлов / папок.

Если я открываю папку, для каждого файла вызывается функция IsMemberOf ().И я могу определить, должен ли значок быть установлен для конкретного файла, запрашивая базу данных во время выполнения, основываясь на состоянии файла.(Я обновлю статус файла в db, скажем, измененные / добавленные аналогичные вещи)

Кажется, это дорого и очень медленно запрашивать каждый файл в каталоге.Поэтому я решаю запросить первый файл (получить все статусы файлов из db в каталоге и сохранить в памяти) и с помощью этого обработать оставшийся список файлов.

Для этого я хочу знатьобрабатываются ли все файлы полностью в функции IsMemberof.Как только все файлы обработаны, я могу очистить память.И если проводник обновляется снова, я могу запросить базу данных еще раз о состоянии файла.

Есть ли способ определить, все ли файлы обрабатываются в функции IsMemberof.Или есть какой-то другой способ сделать это просто.

Спасибо,

1 Ответ

1 голос
/ 24 июня 2010

Полагаю, вы на самом деле говорите об обработчике расширения оболочки и интерфейсе IShellIconOverlayIdentifier.

Да, метод IsMemberOf будет вызываться часто. Вы должны сохранять его быстрым, иначе пользователь будет испытывать плохое поведение в Проводнике, если вашему коду требуется много времени для запроса базы данных. Нет, вы не можете предполагать, что следующий вызов пропустит путь к точкам в той же папке, что и предыдущий, просто потому, что это возможно.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...