Подтвердить что ты не робот

Каковы практические ограничения на количество экземпляров FileSystemWatcher, которые может обрабатывать сервер?

У меня есть служба Windows, которая в настоящее время создает экземпляр около дюжины экземпляров FileSystemWatcher для мониторинга общих папок в корпоративной сети для файлов, которые необходимо обработать.

Я изучаю добавление дополнительных экземпляров, поэтому мне интересно, есть ли у кого-нибудь опыт (с производственными системами) относительно практических ограничений на количество экземпляров FileSystemWatcher, с которыми может справиться производственная система?

Изменить: В моем случае свойство InternalBufferSize не изменяется, поэтому InternalBufferSize является значением по умолчанию 8 КБ... Я предполагаю, что увеличение InternalBufferSize повлияет на количество экземпляров FileSystemWatcher, которые система может запускать одновременно, так что это также часть экстаза...

Изменить: если вы считаете, что это исключительно проблема с ресурсами, и это зависит только от объема доступной памяти или какого-либо другого аппаратного аспекта системы, пожалуйста, поделитесь своим опытом или ссылками на документацию или статьи, подтверждающие ваше мнение.. Мне бы очень хотелось услышать от кого-то, кто достиг предела в производстве, независимо от их технических характеристик, поэтому, пожалуйста, перед тем, как начать голосование, подумайте, что 7 других людей менее чем за 20 минут проявили интерес к слушанию от кого-то, кто подтолкнул к этому ограничения...

4b9b3361

Ответ 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