C# Динамический список в статический список
Из документации класса журнала событий 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
}
Обеспечивает заметное повышение производительности. Однако это открывает возможность для исключения индекса вне диапазона, если журнал событий записывается в процессе обработки. Есть ли способ хранить этот список статически, чтобы количество не изменилось?
1 ответ
Есть ли способ хранить этот список статически, чтобы количество не изменилось?
Похоже, вы хотите что-то вроде:
List<EventLogEntry> entries = eventLogEntries.Cast<EventLogEntry>().ToList();
Это приведет к извлечению всех записей журнала (в то время) в List<T>
, который будет быстро получить доступ либо с индексатором, либо с другим foreach
,
Конечно, вы можете обнаружить, что медленно загружать все записи в журнале - вы должны поэкспериментировать с этим.