我有一些代码应该从事件查看器中的所有路径读取错误。这一切都可以正常使用下面的代码。
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并没有对我的结果产生太大影响。
答案 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秒的时间内完成。
我希望这对任何人都有帮助。