EventLog性能

时间:2017-08-21 13:30:49

标签: c#

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

        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并没有对我的结果产生太大影响。

1 个答案:

答案 0 :(得分:0)

好的经过一些研究后我找到了解决方案。可以在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秒的时间内完成。

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