質問: logReader.ReadEvent()) { //負荷を下げるために1[ms]待機 Tread.Sleep(1); //読み込み対象期間内のイベントログのメッセージのみをListに格納 if (eventInstance.TimeCreated >= startDateTime && eventInstance.TimeCreated < endDateTime) { list.Add(eventInstance.FormatDescription().ToString()); count++; } //読み込み対象期間を過ぎたら処理終了 if (endDateTime <= eventInstance.TimeCreated) { break; } } ``` 処理内容は上記の通り、イベントログ(アーカイブ)ファイルから ソース名:WSHで指定した期間内のログのメッセージ部を取得し、 Listに格納する処理です。 ここで、EventLogReaderは指定したファイル内の一番古いレコードから順に読んでいきます。 なので指定期間の始点が新しいと、読み込みに時間がかかります。 特にアーカイブファイルは1GBあるので高速に読むとCPU負荷が高くなるので、Sleepを入れて負荷を下げるようにしています。 この場合一番古いレコードから順に読んでいくと、 処理に時間がかかるので、CPUの負荷を上げずに処理時間を短縮したいです。 EventLogReaderでEventBookmarkというものをSeekメソッドに渡すことで、 実現できそうな気がするのですが、日付を指定するとかそういったものではなさそうで、 使い方も知識不足でよくわかりません。。。 素直にFilterXPathに期間指定したほうがいいのでしょうが、 FilterXPathで期間指定するのは使い勝手が悪く、億劫になっていました。 (特に日付の書き方) EventLogReaderで指定した日付から読み込みを開始する方法、 何かご存じありませんでしょうか? ご教示のほどよろしくお願いします。
回答: 全く触ったことないから、間違ってたらごめんなさい。 ググってみるとSystemTimeCreated[@SystemTime = ~といったものがあり、こいつをクエリに追加して試してみてはいかがでしょう。試したことないからわかりませんが、この日時の指定の仕方はこのフォーマットでないとだめっぽい?[ここみるとDatetime型の.ToUniversalTime().ToString("o")で得られるようです。