2011-08-11 16 views
4

スタートアップとシャットダウン時に通知されるイベントログメッセージを使用してリモートPCの稼働時間を確立するための短いプログラムを作成しました。現在、ロジックは次のとおりです。イベントログを最新のものから最新のものへ

foreach (eventlogentry) 
    { 
     if (entryTime > OldestTime) 
     { 
      if (entry = Startup) 
      { 
       addOnTime(entry.Time); 
      } 
      if (entry = Shutdown) 
      { 
       addOffTime(entry.Time); 
      } 
     } 
    } 

「OldestTimeは」時間に逆方向にスキャンする方法をはるかに定義....

私はとにかく簡単からイベントを読み取るための私のプログラムをammendに存在しているかどうかを知りたいです最新のものから古いものまで?

このイベントは、リモートイベントログを読み込んでいて、この関数が実行されるまでには時間がかかります。

foreachブロックから抜け出すために最初の "if"に "else"ブロックを追加したため、私たちが探しているタイムパン内のエントリがisntで、プログラムstopが最初のイベント。

+0

どのようにイベントログを読んでいますか?ログを読み取る方法を変更して、異なる順序で処理するようにすることはできますが、コード内でこの時点までに読み取りが行われ、順序を変更することはできません。 – mfdoran

+0

はこれらのログテキストファイルですか?もしそうなら、リストに最初にロードしてから、最後にそれを読んではいけませんか? – ScruffyDuck

+0

これらのリモート偶数ログエントリを照会するのにどのAPIを使用していますか? OldestTimeより新しいエントリだけをリクエストするAPIがありますか?そうすれば注文は本当に重要ではありません。 – thelsdj

答えて

0

あなたの最善の解決策は、データをリストに移動し、その順序を逆にすることです。以下のような何か:

逆の順序でデータを取得する必要があります
EventLog eventLog = new EventLog(); 
eventLog.Log = myEventLog; 
var eventList = new List<EventLogEntry>(); 

foreach(EventLogEntry entry in eventLog.Entries) 
{ 
     eventList.Add(entry); 
} 

eventList.Reverse(); 

、最初すなわち、最新の、そしてあなただけ以前のようにそれを処理することができますが、今回出口ループあなたが最も古い時間前に日付を打ちます。

そのないあなたはまだ全体のログを処理しているが、それはあなたがこの質問をしたので、それがしばらくされている

3

性能の向上を取得するかどうかを確認するために試してみる価値がありますが、私も理想的なソリューション同じ問題に遭遇し、解決策を見つけました。

using System.Diagnostics; 
using System.Linq; 

EventLog events = new EventLog("Application", System.Environment.MachineName); 
foreach (EventLogEntry entry in events.Entries.Cast<EventLogEntry>().Reverse()) 
{ 
    //Do your tasks 
} 

このawnserはまだちょうど前方に列挙するほど速くはありませんが、それは、リストに項目をコピーするためにループを使用するよりも、もう少しエレガントです。

@ leinad13、アプリケーションでは、System.Environment.MachineNameを、イベントの対象とするコンピュータの名前の文字列に変更し、表示するログに「Application」を変更する必要があります。私はあなたのケースでは "システム"と思います。

+1

EventLogEntryCollectionはインデックス作成をサポートしています。逆整数イテレータでそれをループするのが最善です。つまりfor(int i = collection.Count; i> 0; i--){collection [i] .whatever} ' – pensono

関連する問題