我有一些代码,应该读取事件查看器中所有路径中的错误。下面的代码都能很好地工作。
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对我的结果没有太大的影响。
发布于 2017-08-22 08:04:04
经过调查我找到了解决办法。在MSDN 这里上可以找到一个很好的解释/示例。
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秒的时间内完成。
希望这对任何人都有帮助。
https://stackoverflow.com/questions/45798447
复制相似问题