我正在使用Eventlog.Entries(c#.NET 4.0)读取Application事件日志以获取EventLogEntry对象并使用它们执行操作。将新事件写入事件日志时,EventLogEntry.Index属性似乎总是会增长。清除事件日志不会重置EventLogEntry.Index。
当EventLogEntry.Index达到maxint时会发生什么?操作系统是否曾重置索引?
我正在编写一个将在服务器上运行的服务(win2008R2),我必须假设将会有非常多的事件记录。最终它可能会达到21亿,然后会发生什么?
答案 0 :(得分:3)
EventLogEntry.Index
属性是通过Windows API从the EVENTLOGRECORD structure的RecordNumber
字段获取的。
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