我已经构建了一个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 回答
如果您使用的是.NET 3.5或更高版本,则可以使用EventLogQuery class和相关API .