Запросить журнал событий Windows в быстром режиме - PullRequest
3 голосов
/ 16 декабря 2011

Я создал веб-приложение ASP.NET для просмотра данных из журнала событий Windows с использованием элементов управления с привязкой к данным.Данные извлекаются через ObjectDataSource, подключенный к классу-посреднику, который обращается к EventLog.Когда я подключаю GridView к ObjectDataSource, он хочет посчитать строки в EventLog.Я могу сделать это просто и быстро с помощью:

var log = new EventLog {Log = logName};
return log.Entries.Count;

С моей ненаучной точки зрения, это, кажется, возвращается в O (1).Однако, если я хочу подсчитать записи, которые происходят до определенной даты или поступают через определенный источник событий, я не могу найти способ их эффективного подсчета.Я пробовал WMI-запросы, такие как:

var query = new ObjectQuery("Select * from Win32_NTLogEvent
                             where LogFile='Application'");
var searcher = new ManagementObjectSearcher(query);
var result = searcher.Get();
var foo = result.Count;

Для журнала событий с 70 тыс. Записей это занимает порядка минуты на моей рабочей станции с достаточной нагрузкой.Это похоже на O (N).Я также попытался отфильтровать log.Entries с помощью Linq и получить аналогичные результаты.

Есть ли более эффективный способ сделать это?Что касается фактических данных в сетке, я обнаружил, что цикл по log.Entries и доступ через индекс являются очень эффективным способом получения коллекции записей.

1 Ответ

1 голос
/ 16 декабря 2011

Если вы используете .NET 3.5 или выше, вы можете использовать EventLogQuery класс и связанные API.

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