Я успешно решил проблему, используя что-то подобное. Поставьте события в очередь или запишите их в файл для последующей обработки. Запись их на диск была для меня ключом. Это может показаться медленным, но диски кэшируются, а накладные расходы меньше, чем БД. Моя программа отражает около 1 ТБ в день изменений файлов - сотни тысяч файлов в день.

ернете есть много сообщений о том, что функция API ReadDirectoryChangesW пропускает файлы, когда существует большая файловая активность. Большинство обвиняют в скорости, с которой вызывается цикл функции ReadDirectoryChangesW. Это неверное предположение. Лучшее объяснение, которое я видел, это в следующем посте, комментарий в понедельник, 14 апреля 2008 г. 14:15:27

http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/4465cafb-f4ed-434f-89d8-c85ced6ffaa8/

Суть в том, что функция ReadDirectoryChangesW сообщает об изменениях файла, когда они покидают очередь записи файла, а не при добавлении. И если слишком много добавлено, прежде чем быть зафиксированным, вы теряете уведомление о некоторых из них. Вы можете увидеть это с вашей реализацией, если вы просто напишите программу для создания более 1000 файлов в каталоге очень быстро. Просто посчитайте, сколько файловых уведомлений вы получаете, и вы увидите, что бывают случаи, когда вы не получите их все.

Вопрос в том, нашел ли кто-нибудь надежный способ использования функции ReadDirectoryChangesW без необходимости каждый раз очищать том? Это не допускается, если пользователь не является администратором, а также может потребоваться некоторое время для его завершения.

Ответы на вопрос(3)

Ваш ответ на вопрос