2014-05-21 5 views
1

이벤트 로그 클래스의 설명서에서 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 항목)는 느립니다. foreach 대신 for 루프를 사용하는 이유는이 객체가 얼마나 가까운지를 나타내는 반복자 위치가 필요하기 때문입니다.

카운트 변수를 저장하고 반복 :

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

는 눈에 띄는 성능 향상을 제공합니다. 그러나 처리가 발생할 때 이벤트 로그에 기록되는 경우 범위를 벗어나는 인덱스 예외 가능성을 엽니 다. 카운트가 변경되지 않도록이 목록을 정적으로 저장하는 방법이 있습니까?

+0

프로그램이 실행되는 동안'eventLog' 객체가 쓰여지거나 컴퓨터 이벤트 로그에 기록됩니까? –

+0

기계 이벤트 로그 – Dudemanword

답변

4

이 목록을 정적으로 저장하여 개수가 변경되지 않도록 할 방법이 있습니까? 인덱서와 중 하나에 액세스 할 후 빠른있을 것 List<T>로 (그 당시) 모든 로그 항목을 가져옵니다

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

:

그것은 당신이 뭔가를 원하는 같은 소리 또는 다른 foreach. 물론

, 당신은 단지 모든 로그 항목을 가져 느린 찾을 수 있습니다 - 당신은 실험해야한다.

+0

몇 가지 철저한 테스트를 마친 후 다시 시도해보고자합니다. – Dudemanword

+0

예상대로 이벤트 로그 항목을 다른 목록으로 캐스팅하는 것은 매우 느립니다. 나는 놀아서 속도를 높이기 위해 내가 할 수있는 것을 보게 될 것이다. – Dudemanword

+0

@Dudemanword : 아니요, * 캐스팅 * 속도가 전혀 느리지 않습니다. * 속도가 느려질 항목을 가져 오는 것입니다. 원래 목록을 반복하여 모든 것을 무시하면 같은 문제가 발생합니다. –