我有一个应用程序从事件日志中读取一些数据,如果事件日志太大,则应用程序性能太差,即超过30,000个条目 .
我正在寻找一种更快捷的方法来获取信息,
我现在使用了两种方法,使用WMI查询是{从Win32_NTLogEvent选择消息,其中Logfile ='System'和EventCode ='1'}
我使用了System.Diagnostic.Eventlog.GetEventLogs();这也需要太多时间
我该怎么用来提高搜索速度?
这段简单的代码在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);
为了获得更好的性能,您可以使用正确创建的XPATH查询,通过您自己或通过Windows事件查看器(创建 Custom view ,而不是选择 XML 选项卡)
Custom view
XML
1 回答
这段简单的代码在AMD Athlon X3上的100,000个事件上花了4.6秒(i5更快) .
为了获得更好的性能,您可以使用正确创建的XPATH查询,通过您自己或通过Windows事件查看器(创建
Custom view
,而不是选择XML
选项卡)