0

イベントログからいくつかのデータを読み取るアプリケーションがあります。イベントログが大きすぎる場合、つまり30,000エントリを超える場合、このアプリケーションのパフォーマンスは非常に悪くなります。

私はそれから情報を取得するためのより速い方法を探しています、

これまで2つの方法を使用しましたが、WMIを使用すると、クエリは{Win32_NTLogEventからメッセージを選択します。ここでLogfile='System'およびEventCode='1'}です。

System.Diagnostic.Eventlog.GetEventLogs();を使用しました。これも時間がかかりすぎる

検索速度を上げるには何を使用すればよいですか?

4

1 に答える 1

1

この単純なコードは、AMD Athlon X3の100,000イベントで4.6秒かかります(i5の方が高速です)。

string queryString = "*";
int eventsCount = 0;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
EventLogQuery eventsQuery = new EventLogQuery("MyLog", PathType.LogName, queryString);
EventLogReader logReader = new EventLogReader(eventsQuery);

for (EventRecord eventInstance = logReader.ReadEvent();
                null != eventInstance; eventInstance = logReader.ReadEvent())
{
  if (eventInstance.Id == 100) //random event id                 
     ++eventsCount;

}
stopWatch.Stop();

Console.WriteLine("Found events: {0}", eventsCount);
Console.WriteLine("Time elapsed: {0}", stopWatch.Elapsed);

パフォーマンスを向上させるために、適切に作成されたXPATHクエリを、独自に、またはWindowsイベントビューアを介して使用できます(タブCustom viewを選択するよりも作成しXMLます)

于 2012-11-29T14:30:23.017 に答える