Ответ 1
FileSystemWatcher
под обложкой используется ReadDirectoryChangesW
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365465(v=vs.85).aspx. Это достаточно недорогая операция, которая просто считывается из каталога, который заканчивается при изменении.
Результаты сохраняются в буфере ядра до того, как они будут скопированы в ваш собственный буфер памяти FileSystemWatcher
.
Чтобы учитывать две ресурсы ОС, Handle, созданная вызовом CreateFile
на FileSystemWatcher
, и размер буфера 8KB (по умолчанию) в ядре для каждого объекта FileSystemWatcher
, который отнимает у вас системы Ядро Paged и None-Paged Pools.
Ваш FileSystemWatcher
по существу конкурирует за эти три ресурса.
- CPU время для обработки изменений
- Ручки в системе
- Пул страниц
Вы вряд ли столкнетесь с проблемой (2). Вероятно, проблема с (3) связана с энергосистемой (нагрузками процессора), работающей с x86. В противном случае (1) будет вашим лимитом.
Рукоятки
Ручки исчерпаны (особенно на x86), подробнее об этом здесь, http://blogs.technet.com/b/markrussinovich/archive/2009/09/29/3283844.aspx
Но в 16 миллионов + ручек (даже на x86), прежде чем вы закончите, для ваших намерений я думаю о нем как о бесконечном ресурсе. Вы исчерпываете изменения в обработке процессора задолго до того, как достигнете предела ОС.
Страница /Non -Paged Pools
Страница/Non-Paged Pools можно увидеть в диспетчере задач. На x86 они очень конечны. Подробнее здесь http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspx#memory_limits
CPU
Вы увидите множество неопровержимых доказательств того, что когда это израсходовано, FileSystemWatcher
вид остановок работает. Некоторые изменения в каталогах сообщаются, некоторые из них не являются и неизбежны при больших реализациях FileSystemWatcher
, в результате вы должны обнаружить эти события и сделать список каталогов самостоятельно или сделать это на базе опроса.
Примечания
Если вы выполняете загрузку FileSystemWatcher
, обратите внимание:
- Работает с буфером
- Размер буфера больше 64 КБ на сетевых путях.
Подробнее о хорошей практике кодирования для этого объекта здесь, http://bytes.com/topic/visual-basic-net/answers/536125-filesystemwatcher-across-network#post2092018