Filewatcher для всего компьютера (альтернатива?) - PullRequest
1 голос
/ 08 февраля 2012

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

Я думал об использовании класса .net filewatcher, но после некоторых тестов я обнаружил следующие ограничения:

1) Filewatcher имеет буфер (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.90).aspx):

Если за короткое время произойдет много изменений, буфер может переполниться. Это приводит к тому, что компонент теряет отслеживание изменений в каталоге, и он будет предоставлять только общее уведомление. Увеличение размера буфер со свойством InternalBufferSize стоит дорого, так как исходит из невыгружаемой памяти, которая не может быть выгружена на диск, поэтому сохраняйте размер буфера небольшим, но достаточно большим, чтобы не пропустить изменение файла События. Чтобы избежать переполнения буфера, используйте NotifyFilter и Свойства IncludeSubdirectories, чтобы вы могли отфильтровать нежелательные изменения уведомления.

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

2) Filewatcher имеет утечки памяти: http://connect.microsoft.com/VisualStudio/feedback/details/654232/filesystemwatcher-memory-leak Я проверил это сам, и это правда, через несколько дней моя память процесса увеличивается с 20 МБ до 250 МБ

3) Microsoft говорит, что мы должны использовать Filewatcher для определенных папок (я не знаю почему):

Используйте FileSystemWatcher для отслеживания изменений в указанном каталоге.

Так что по этим причинам мне нужно альтернативное решение для создания моего приложения. Я знаю, что могу написать драйвер, но предпочитаю, чтобы это было решение .net (конечно, на основе win32 api).

Спасибо за вашу помощь, Омри

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Установка мониторинга (особенно синхронных уведомлений) замедлит работу системы.Вы, вероятно, можете использовать наш продукт CallbackFilter, который предоставляет драйвер и удобный API .NET для отслеживания изменений файлов.И CallbackFilter поддерживает асинхронные уведомления, которые быстрее.Возможны скидки и бесплатные лицензии.

0 голосов
/ 08 февраля 2012

Попробуйте сделать это через WMI imo - следующая ссылка актуальна: http://www.codeproject.com/Articles/42212/WMI-and-File-System-Monitoring

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