当EventLogEntry.Index达到MaxInt时会发生什么?

时间:2017-01-19 11:09:08

标签: c# .net

我正在使用Eventlog.Entries(c#.NET 4.0)读取Application事件日志以获取EventLogEntry对象并使用它们执行操作。将新事件写入事件日志时,EventLogEntry.Index属性似乎总是​​会增长。清除事件日志不会重置EventLogEntry.Index。

当EventLogEntry.Index达到maxint时会发生什么?操作系统是否曾重置索引?

我正在编写一个将在服务器上运行的服务(win2008R2),我必须假设将会有非常多的事件记录。最终它可能会达到21亿,然后会发生什么?

1 个答案:

答案 0 :(得分:3)

EventLogEntry.Index属性是通过Windows API从the EVENTLOGRECORD structureRecordNumber字段获取的。

The documentation for RecordNumber明确指出:

  

EVENTLOGRECORD的RecordNumber成员包含记录号   用于事件日志记录。写入事件的第一条记录   log是记录号1,其他记录按顺序编号。   如果记录号达到ULONG_MAX,则下一个记录号将是   0,而不是1;但是,你使用零来寻找记录。

请注意ULONG_MAX是一个'C'预处理器值,实际上等同于C#的uint.MaxValue,但是听起来很混乱......

另请注意,遗憾的是EventLogEntry.Index将此uint作为int返回,因此当它超过2 ^ 31时,它将变为负数。

如果您想确保它正常工作,您可能希望将其强制转换为uint,以确保正确处理2 ^ 31和2 ^ 32-1之间的值。

要专门回答您的问题“当EventLogEntry.Index达到MaxInt时会发生什么?”:

MaxInt之后的下一个索引将是-2147483648,然后是-2147483647,依此类推,直至达到-1,此时它将换行到0然后开始正常计数。

但是,如果您将int转换为uint,那么索引将从1转到uint.MaxValue,那么它将回到0