データバインドされたコントロールを使用してWindowsイベントログからデータを表示するためのASP.NET Webアプリケーションを構築しました。データは、EventLog
にアクセスするメディエータクラスに接続されたObjectDataSource
を介して取得されます。 GridView
をObjectDataSource
に接続すると、EventLog
の行が数えられます。私はこれを簡単かつ迅速に行うことができます:Windowsイベントログを効率的にクエリする
var log = new EventLog {Log = logName};
return log.Entries.Count;
私の非科学的な見解から、O(1)に戻っているようです。ただし、特定の日付より前に発生した、または特定のイベントソースを介して発生したエントリをカウントしたい場合は、効率的なカウント方法を見つけることができません。これは私の合理パワードワークステーション上分のオーダーを取り、70Kのエントリでイベントログの
var query = new ObjectQuery("Select * from Win32_NTLogEvent
where LogFile='Application'");
var searcher = new ManagementObjectSearcher(query);
var result = searcher.Get();
var foo = result.Count;
:私のようなWMIクエリを試してみました。それはO(n)のように見えます。私もLinqでlog.Entries
のフィルタリングを試みて、同様の結果を得ました。
これを実行する方法はこれ以上ありませんか?グリッド内の実際のデータについては、log.Entries
をループし、インデックスを介して非常に効果的な方法でエントリのコレクションを取得しています。
ありがとうございます。私はこれを試してみる。 –
これは実際には非常に高速ですが、ゲストOSとクエリしているOSがどちらもVista以上のバージョンであることが必要です。私は今この問題に遭遇し、立ち往生した。 – imgen