【问题标题】:Enhance reading speed from event log?提高事件日志的读取速度?
【发布时间】:2012-11-29 07:16:11
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • @Giedrius ,感谢回复,我试过了,但它并没有带来我需要的所有信息,我至少需要记录 ID 和事件 ID 和消息
  • 您能否在事件日志中发布您的程序执行 30,000 个事件所需的时间?
  • 在核心 i5 上大约需要 15 秒
  • 关于@Giedrius 的建议:EventLogReader 返回一个EventLogRecord,其中包含您提到的两个字段。

标签: c# .net wmi event-log


【解决方案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 选项卡)

【讨论】:

  • 这种方式帮助我节省了一些时间,例如,一台使用旧方式的 PC 需要 21 秒来执行所需的搜索,但使用你的方式它变成了 15 秒,我仍然需要更快的方式,但我认为没有,:)\
  • @AbdallahNasir 实际上,你可以做一些多线程编程;)例如,在几个线程中单独读取日志,第一个线程读取第一个 0 - 4999 个事件,第二个读取事件从 5000 到 9999 个事件等。
  • 我没有考虑过,因为我还没有做过类似的事情,谢谢:)
猜你喜欢
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多