【问题标题】:EventLog Performance [duplicate]事件日志性能 [重复]
【发布时间】:2017-08-21 13:30:48
【问题描述】:

我有一些代码应该从事件查看器的所有路径中读取错误。使用下面的代码一切正常。

        foreach (var log in EventLog.GetEventLogs(Environment.MachineName))
        {
            log.Entries
                .Cast<EventLogEntry>()
                .Where(x => x.EntryType == EventLogEntryType.Error && x.TimeWritten > DateTime.Now.AddHours(-1))
                .ToList()
                .ForEach(x =>
                {
                    list.Add(new LogEntry(x, log.LogDisplayName, ItemStatus.Error));
                });
        }  

这通常需要不到两秒钟的时间。
现在我的问题是,当我使用另一台机器而不是 Environment.MachineName 时,这个过程需要 5-20 分钟。

有没有办法加快速度?

谢谢

避免使用 LINQ 对我的结果影响不大。

【问题讨论】:

  • 好吧,如果它工作得很好,你需要什么帮助?
  • @non破坏性,我猜 - 它很慢,标题说“性能”,谁需要问号?
  • 对不起!发布到早:)
  • @Sinatr 我刚刚看了一下这个问题,并尝试避免使用 LINQ,但它并没有对我的结果产生太大影响。它仍然需要分钟。 3分钟。那么你们认为甚至可以放慢速度(比如 30 秒)还是我必须接受 3-5 分钟?
  • @j.zeddi,我不是专家,接受的答案提到了 WMI,也许值得一试?

标签: c#


【解决方案1】:

好的,经过一番研究,我找到了解决方案。可以在 MSDN here 上找到一个很好的解释/示例。

    EventLogSession session = new EventLogSession(Environment.MachineName);

    // [System/Level=2] filters out the errors
    EventLogQuery query = new EventLogQuery("Log", PathType.LogName, "*[System/Level=2]");

    EventLogReader reader = new EventLogReader(query);

    for (EventRecord eventInstance = reader.ReadEvent();
        null != eventInstance;
        eventInstance = reader.ReadEvent())
    {
        // Output or save your event data here.
    }

当使用旧代码等待 5-20 分钟时,此代码会在不到 10 秒内完成。

我希望这对任何人都有帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 2021-10-26
相关资源
最近更新 更多