首页 文章

以高效的方式查询Windows事件日志

提问于
浏览
3

我已经构建了一个ASP.NET Web应用程序,使用数据绑定控件查看Windows事件日志中的数据 . 通过连接到访问 EventLog 的中介类的 ObjectDataSource 检索数据 . 当我将 GridView 连接到 ObjectDataSource 时,它想要计算 EventLog 中的行数 . 我可以简单快速地完成这项工作:

var log = new EventLog {Log = logName};
return log.Entries.Count;

从我不科学的角度来看,它似乎在O(1)中回归 . 但是,如果我想计算在特定日期之前或通过某个事件源发生的条目,我找不到一种方法来计算它们的效率 . 我尝试过WMI查询,例如:

var query = new ObjectQuery("Select * from Win32_NTLogEvent
                             where LogFile='Application'");
var searcher = new ManagementObjectSearcher(query);
var result = searcher.Get();
var foo = result.Count;

对于具有70k条目的事件日志,这在我合理供电的工作站上大约需要一分钟 . 它's looking like O(n). I'也试过用Linq过滤 log.Entries 并得到类似的结果 .

还有更高效的方法吗?对于网格中的实际数据,我发现循环遍历 log.Entries 并通过索引访问一种非常高效的方式来获取条目集合 .

1 回答

  • 1

    如果您使用的是.NET 3.5或更高版本,则可以使用EventLogQuery class和相关API .

相关问题