C#でイベントログを読み込む処理を作っています。
読み込み自体はできるようになったのですが、処理時間短縮のため、
指定した日時から読み込みを開始したいです。
まずは以下のコードを見てください。
C#
1//FilterXPathを指定 2string queryString = @"*[System[Provider[@Name='WSH']]]"; 3//イベントログのフルパス(アーカイブファイル) 4string eventLogLocation = eventLogFileInfo.FullName; 5EventLogQuery eventsQuery = 6 new EventLogQuery(eventLogLocation, PathType.FilePath, queryString); 7EventLogReader logReader = new EventLogReader(eventsQuery); 8 9for (EventRecord eventInstance = logReader.ReadEvent(); 10 null != eventInstance; eventInstance = logReader.ReadEvent()) 11{ 12 //負荷を下げるために1[ms]待機 13 Tread.Sleep(1); 14 //読み込み対象期間内のイベントログのメッセージのみをList<string>に格納 15 if (eventInstance.TimeCreated >= startDateTime && eventInstance.TimeCreated < endDateTime) 16 { 17 list.Add(eventInstance.FormatDescription().ToString()); 18 count++; 19 } 20 //読み込み対象期間を過ぎたら処理終了 21 if (endDateTime <= eventInstance.TimeCreated) 22 { 23 break; 24 } 25}
処理内容は上記の通り、イベントログ(アーカイブ)ファイルから
ソース名:WSHで指定した期間内のログのメッセージ部を取得し、
List<string>に格納する処理です。
ここで、EventLogReaderは指定したファイル内の一番古いレコードから順に読んでいきます。
なので指定期間の始点が新しいと、読み込みに時間がかかります。
特にアーカイブファイルは1GBあるので高速に読むとCPU負荷が高くなるので、Sleepを入れて負荷を下げるようにしています。
この場合一番古いレコードから順に読んでいくと、
処理に時間がかかるので、CPUの負荷を上げずに処理時間を短縮したいです。
EventLogReaderでEventBookmarkというものをSeekメソッドに渡すことで、
実現できそうな気がするのですが、日付を指定するとかそういったものではなさそうで、
使い方も知識不足でよくわかりません。。。
素直にFilterXPathに期間指定したほうがいいのでしょうが、
FilterXPathで期間指定するのは使い勝手が悪く、億劫になっていました。
(特に日付の書き方)
EventLogReaderで指定した日付から読み込みを開始する方法、
何かご存じありませんでしょうか?
ご教示のほどよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。