c#动态列表到静态列表

本文关键字:列表 静态 动态 | 更新日期: 2023-09-27 18:04:22

事件日志类文档中的EventLogEntryCollection是事件日志条目的动态列表。它建议直接使用Count属性,而不是将其值存储在变量中。实现此行为:

private void ReadEventLog()
{
    EventLog eventLog = new EventLog("Application", "TheGreatestMachineInTheWorld");
    EventLogEntryCollection eventLogEntries = eventLog.Entries;
    for (int i = 0; i < eventLogEntries.Count; i++){
        EventLogEntry entry = eventLog.Entries[i];
        //Do Some processing on the entry
}

对于大事件日志(>20000条)来说速度很慢。使用for循环而不是foreach的原因是,我需要迭代器的位置来指示这个东西离结束还有多远。

存储count变量并在其上迭代:

int eventLogEntryCount = eventLogEntries.Count;
for (int i = 0; i < eventLogEntryCount; i++){
        EventLogEntry entry = eventLog.Entries[i];
        //Do Some processing on the entry
}

提供显著的性能提升。但是,如果在处理发生时正在写入事件日志,则可能会出现索引超出范围异常。是否有一种方法可以静态地存储这个列表,这样计数就不会改变?

c#动态列表到静态列表

是否有一种方法可以静态地存储这个列表,这样计数就不会改变?

听起来你想要这样的东西:

List<EventLogEntry> entries = eventLogEntries.Cast<EventLogEntry>().ToList();

这将获取所有日志条目(当时)到List<T>,然后可以快速访问索引器或另一个foreach

当然,您可能会发现仅获取所有日志条目很慢-您应该尝试一下。