C# 如何防止在读取事件日志时丢失事件检索?

C# 如何防止在读取事件日志时丢失事件检索?,c#,winapi,event-log,system.diagnostics,C#,Winapi,Event Log,System.diagnostics,我正在使用类(正如它被认为是从事件日志中读取最快的可用方法)来读取新编写的事件。假设我有一个名为CustomEventLog1的事件日志,大小为2MB。我有一个应用程序将总共20000个事件写入此日志,并在日志达到最大大小时根据需要设置覆盖事件 现在,当我开始写事件时,观察者明显滞后于读取速度,事件丢失 让我告诉你它是怎么发生的;当应用程序写入时,比如说(第1000个条目),观察者仍在读取500个条目,因此当观察者来读取2000个条目,写入应用程序已将其替换为4000个条目 所以在第1999个条

我正在使用类(正如它被认为是从事件日志中读取最快的可用方法)来读取新编写的事件。假设我有一个名为
CustomEventLog1
的事件日志,大小为2MB。我有一个应用程序将总共20000个事件写入此日志,并在日志达到最大大小时根据需要设置
覆盖事件

现在,当我开始写事件时,观察者明显滞后于读取速度,事件丢失

让我告诉你它是怎么发生的;当应用程序写入时,比如说
(第1000个条目)
,观察者仍在读取
500个条目
,因此当观察者来读取
2000个条目
,写入应用程序已将其替换为
4000个条目

所以在第1999个条目之后,我得到了第4000个条目。当应用程序完成写入
20000个事件时
,观察者只获得了
12020个条目
,其余条目丢失


有办法解决这个问题吗?我知道增加日志文件大小就可以了,但是有没有办法在不增加日志大小和不降低写入速度的情况下实现这一点。

如果要在不增加日志大小和不降低写入速度的情况下进行覆盖,并且要读取已被覆盖的日志,这两者都不能兼得。但您可以将
logsize>=20000
,并在读取事件后删除该事件,以便最大程度地保存日志大小。

可能在通知过程中存在开销。我想说,一旦您收到“更改”通知,您应该在重新启动通知系统之前读取循环中的所有新事件。问题是我的应用程序每秒向事件日志写入10000个事件,而事件日志查看器在您每次读取一个事件时每秒只能读取3000个或更少的事件@jonathanAt,正在等待通知回调,然后再读取下一个。我的建议是,在收到第一个通知后,在循环中读取所有新的通知事件。或者将您的应用程序更改为不在事件日志中发送大量的垃圾邮件。