0

我有一个应用程序从事件日志中读取一些数据,如果事件日志太大,即超过 30,000 个条目,则该应用程序性能太差。

我正在寻找一种更快的方法来从中获取信息,

我现在使用了两种方法,使用 WMI 查询是 {Select message from Win32_NTLogEvent Where Logfile = 'System' and EventCode = '1' }

我使用 System.Diagnostic.Eventlog.GetEventLogs(); 这也需要太多时间

我应该使用什么来提高搜索速度?

4

1 回答 1

1

这段简单的代码在 AMD Athlon X3 上处理 100,000 个事件需要 4.6 秒(i5 更快)。

string queryString = "*";
int eventsCount = 0;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
EventLogQuery eventsQuery = new EventLogQuery("MyLog", PathType.LogName, queryString);
EventLogReader logReader = new EventLogReader(eventsQuery);

for (EventRecord eventInstance = logReader.ReadEvent();
                null != eventInstance; eventInstance = logReader.ReadEvent())
{
  if (eventInstance.Id == 100) //random event id                 
     ++eventsCount;

}
stopWatch.Stop();

Console.WriteLine("Found events: {0}", eventsCount);
Console.WriteLine("Time elapsed: {0}", stopWatch.Elapsed);

为了获得更好的性能,您可以自己或通过 Windows 事件查看器使用正确创建的 XPATH 查询(创建Custom view而不是选择XML选项卡)

于 2012-11-29T14:30:23.017 回答