在远程计算机上读取事件日志的最快方法是什么?

Kap*_*pil 12 c# event-log

我正在开发一个从远程机器读取事件日志(应用程序)的应用程序.我正在使用.net中的EventLog类,然后迭代日志条目,但这非常慢.在某些情况下,某些计算机具有40000多个日志条目,并且需要数小时才能遍历条目.完成这项任务的最佳方法是什么?.net中是否有其他类更快或其他任何技术?

Chr*_*isW 15

伙计,我感觉到你的痛苦.我们的应用程序中存在完全相同的问题.

您的解决方案有一个分支,具体取决于您运行的服务器版本以及运行"目标"计算机的服务器版本.

如果您同时使用Vista或Windows Server 2008,那么您很幸运.你应该看看System.Diagnostics.Eventing.Reader.EventLogQuerySystem.Diagnostics.Eventing.Reader.EventLogReader.这些是.net 3.5中的新功能.

基本上,您可以使用XML构建查询并将其发送到远程计算机上运行.也许您只是在搜索特定类型的事件,或者只是搜索特定时间点的新事件.搜索在远程计算机上运行,​​然后您只需返回匹配的事件.新类比旧的.net 2.0方式快得多,但同样,它们仅在Vista或Windows Server 2008上受支持.

对于我们的应用程序,当目标不在Vista/Win2008上时,我们从远程系统下载了原始.evt文件,然后使用其二进制格式解析该文件.关于.evt文件(Vista之前)的事件日志格式有几个数据来源,包括链接文本和我在codeproject.com上回忆起的有一些c#代码的文章.

Vista和Windows Server 2008计算机使用新的.evtx格式,这是一种新格式,因此您无法在所有版本中使用相同的二进制解析方法.但是新的EventLogQuery和EventLogReader类是如此之快,以至于你不必这么做.现在使用内置类非常快速.


cra*_*her 0

也许 WMI 可以帮助您:

使用 C# 的 WMI