C#从动态列表到静态列表

C#从动态列表到静态列表,c#,event-log,C#,Event Log,从事件日志类的文档中,EventLogEntryCollection是事件日志项的动态列表。它建议直接使用Count属性,而不是将其值存储在变量中。实现此行为: private void ReadEventLog() { EventLog eventLog = new EventLog("Application", "TheGreatestMachineInTheWorld"); EventLogEntryCollection eventLogEntries = eventLog

从事件日志类的文档中,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
}
private void ReadEventLog()
{
EventLog EventLog=新的事件日志(“应用程序”、“最伟大的机器”);
EventLogEntryCollection eventLogEntries=eventLog.Entries;
for(int i=0;i
对于大型事件日志(>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
}
int eventLogEntryCount=eventLogEntries.Count;
for(int i=0;i
提供了显著的性能提升。但是,如果在处理过程中写入事件日志,则可能会出现索引超出范围异常。是否有方法静态存储此列表,以便计数不会更改

有没有办法静态存储此列表,使计数不变

听起来你想要的是:

List<EventLogEntry> entries = eventLogEntries.Cast<EventLogEntry>().ToList();
List entries=eventLogEntries.Cast().ToList();
这将把所有日志条目(当时)提取到
列表中,然后可以使用索引器或另一个
foreach
快速访问该列表


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

程序运行时是写入
eventLog
对象还是写入机器事件日志?这将是机器事件日志。经过一些彻底的测试后,我会尝试并报告回来!正如预期的那样,它是将事件日志条目强制转换到另一个列表非常慢。我将四处玩,看看我能做些什么来加快转换速度。@Dudemanword:不,强制转换一点也不慢-它将缓慢地获取条目。如果您只是迭代原始列表并忽略所有内容,您将看到同样的问题。