小编Luc*_*asa的帖子

快速高效地读取Windows日志

我想要完成的是一个C#应用程序,它将从Windows事件日志中读取日志并将它们存储在其他位置。这必须很快,因为将要安装它的某些设备会生成大量的日志/秒。

到目前为止,我已经尝试了三种方法:

本地WMI:效果不好,有太多错误和异常,这些异常和异常是由需要加载的集合的大小引起的。EventLogReader:我虽然这是一个完美的解决方案,但是它允许您使用XPath表达式查询事件日志。问题是,当您想获取每个日志的消息内容时(通过调用FormatDescription()),对于长集合来说会花费太多时间。例如:如果我浏览它们,我可以在0.11s内读取12k日志。如果我添加一行来为每个日志存储消息,那么将花费近6分钟的时间来完成完全相同的操作,这对于如此低的日志数量是完全疯狂的。我不知道是否可以对EventLogReader进行某种优化以更快地获取消息,我无法

我还发现,您可以使用名为EventLog的类读取日志条目。但是,该技术不允许您输入任何类型的过滤器,因此您基本上必须将整个日志列表加载到内存中,然后根据需要将其过滤掉。这是一个例子:

EventLog eventLog = EventLog.GetEventLogs().FirstOrDefault(el => el.Log.Equals("Security", StringComparison.OrdinalIgnoreCase));
var newEntries = (from entry in eventLog.Entries.OfType()
orderby entry.TimeWritten ascending
where entry.TimeWritten > takefrom
select entry);
Run Code Online (Sandbox Code Playgroud)

尽管获取消息的速度更快,但是内存的使用可能会很高,我不想在将部署此解决方案的设备上引起任何问题。

有人可以帮我吗?我找不到实现这种目标的任何解决方法或方法。

谢谢!。

c# windows logging

6
推荐指数
2
解决办法
540
查看次数

标签 统计

c# ×1

logging ×1

windows ×1