C# 如何在EventLogEntyCollection中获取新日志?

C# 如何在EventLogEntyCollection中获取新日志?,c#,.net,windows,event-log,C#,.net,Windows,Event Log,我需要监视非常繁忙的域控制器上的安全事件日志,每分钟生成数百个日志 我知道如何使用EventLog、EventLogEntry和EvenLogEntryCollection打开和读取服务器的事件日志,但是EvenLogEntryCollection可以包含约300.000个事件,并且它会不断循环(而且速度非常快),因此我无法依靠它的索引来查找新条目 到目前为止,我唯一能想到的是保存上次处理的日志项的时间戳,然后在EventLogEntryCollection上迭代,直到我找到一个EventLog

我需要监视非常繁忙的域控制器上的安全事件日志,每分钟生成数百个日志

我知道如何使用
EventLog
EventLogEntry
EvenLogEntryCollection
打开和读取服务器的事件日志,但是
EvenLogEntryCollection
可以包含约300.000个事件,并且它会不断循环(而且速度非常快),因此我无法依靠它的索引来查找新条目

到目前为止,我唯一能想到的是保存上次处理的日志项的时间戳,然后在
EventLogEntryCollection
上迭代,直到我找到一个
EventLogEntry
,它的
TimeGenerated
属性大于我保存的时间戳;但是迭代大约30万个条目来查找新条目的速度非常慢

如何在大型事件日志中快速找到新条目


编辑:
<>我忘了提:我需要做这个>强>远程<强>,而不是在DC本身…

< p>您可以考虑使用Windows管理工具。WMI查询语言(WQL)允许您指定约束。ManagementEventWatcher允许您响应WMI事件

查找所需WQL查询类型的示例

以下是如何编写代码:

WqlEventQuery wqlQuery = new WqlEventQuery(...);
ManagementEventWatcher watcher = new ManagementEventWatcher(wqlQuery);
watcher.EventArrived += new EventArrivedEventHandler(_Your_Event_Handler_);
watcher.Start();

// Do stuff.

watcher.Stop();

美好的让我想知道为什么EventLog和/或EventLogEntryCollection类中没有事件处理程序…我的错误:EventLog类中实际上有一个“EventWrited”事件可用于此目的。但它只能在本地计算机上工作:-(…这让我直接进入下一个问题:此WMI方法是否也适用于远程系统?我非常确定WMI可以用于查询有关远程计算机的信息,但我不确定这是否适用于事件。请查看ManagementScope的构造函数。它采用“\\computer\u name\root\cimv2”格式的字符串