阅读事件日志从最新到最旧

我已经写了一个简短的程序来build立使用在启动和closures时发布的事件日志消息的远程PC的正常运行时间。 目前的逻辑是:

foreach (eventlogentry) { if (entryTime > OldestTime) { if (entry = Startup) { addOnTime(entry.Time); } if (entry = Shutdown) { addOffTime(entry.Time); } } } 

“OldestTime”定义了在多长时间后向后扫描….

我想知道是否有任何方法可以轻易地修改我的程序,从最新到最旧的事件读取事件?

它正在读取远程事件日志,并且需要一段时间才能运行此function,因为它从最后开始并向前读取。

我知道这一点,因为我添加了一个“其他”块到第一个“如果”突破foreach块,如果条目不是在我们正在寻找的时间范围内,程序停止在它读取的第一个事件。

你问这个问题已经有一段时间了,但是我遇到了同样的问题并找到了一个解决方案。

 using System.Diagnostics; using System.Linq; EventLog events = new EventLog("Application", System.Environment.MachineName); foreach (EventLogEntry entry in events.Entries.Cast<EventLogEntry>().Reverse()) { //Do your tasks } 

这个awnser仍然不如枚举它的速度快,但是比使用循环将项目复制到列表要优雅一些。

@ leinad13,对于您的应用程序,您需要将System.Environment.MachineName更改为具有要从中启动事件的计算机的名称的字符串,并将“Application”更改为您要查看的日志。 我认为你的情况是“系统”。

您的最佳解决方案可能是将数据移动到列表中,然后颠倒顺序。 像下面这样:

 EventLog eventLog = new EventLog(); eventLog.Log = myEventLog; var eventList = new List<EventLogEntry>(); foreach(EventLogEntry entry in eventLog.Entries) { eventList.Add(entry); } eventList.Reverse(); 

这应该得到的数据倒序,即最新的第一,然后你可以像以前一样处理它,但这次退出循环,当你在最早的时间点击日期。

它不是一个理想的解决方案,因为您仍在处理整个日志,但是可能值得尝试查看是否在性能方面有所改进