Могу ли я ограничить FileSystemWatcher или лучше использовать таймер? - PullRequest
0 голосов
/ 08 февраля 2012

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

Я мог бы использовать компонент FileSystemWatcher и отслеживать событие Change, но это событие будетстрельба без остановок, поскольку файл журнала почти постоянно записывается.Я не хочу открывать / закрывать дБ-соединения волей-неволей.

Мой текущий инстинкт - использовать таймер, а затем периодически анализировать / качать / очищать файл журнала (в зависимости от времени или в зависимости от времени и размера файла).

Существует ли распространенный / проверенный способ обработки сценария (шаблона проектирования)?

Обновление: я вижу, FileSystemWatcher имеет свойство NotifyFilter, причем один из фильтруемых элементов имеет значение "Размер";Я предполагаю (еще не нашел подтверждения), что каждый раз, когда размер файла изменяется на 1 КБ, он запускается;это было бы разумным «газом», если это правда ...

Ответы [ 3 ]

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

Есть ли у вас контроль над генерацией файла журнала?Если это так, то вы можете создать новый файл журнала, который будет повторяться каждый раз, когда он достигает определенного размера, и переименовывать старый файл журнала в определенный формат.Затем установите фильтр наблюдателя файловой системы для «архивных» файлов журнала и обработайте их при их создании.

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

Не уверен, является ли это шаблоном проектирования, но если вы контролируете объем буферизации перед фактической записью в файл журнала, вы можете минимизировать частоту.

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

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

...