2011-08-03 3 views
2

私はC#を使用してアプリケーションを作成しています。私はいくつかのベンチマークを実行してアプリケーションを高速化しようとしましたが、問題が発生しました。ファーストタイムインデックス配列が遅すぎる

Process[] processes = Process.GetProcesses(); 
foreach (Process process in processes) 
    if (process.MainWindowTitle == "Title") 
    { 
     // Do Stuff 
    } 

私は問題は、すぐに私はその配列の特定の要素にアクセスして、配列を作成するように、あるその後のアクセスよりもかなり長い時間がかかることに気づいた:私は別の間隔で複数回実行する必要がある場合に、ループを持っています。

if (processes[0].MainWindowTitle == "Title") { } // ~0.5 ms 
if (processes[0].MainWindowTitle == "Title") { } // ~0.0 ms 
if (processes[0].MainWindowTitle == "Title") { } // ~0.0 ms 
if (processes[0].MainWindowTitle == "Title") { } // ~0.0 ms 

これはかなり重大な問題です。 0.1msよりも短い時間を要するものは50msかかる。なぜこれが起こっているのか、私は物事をスピードアップするために何ができるのですか?

答えて

9

遅い配列にアクセスしていません - 遅い値が入力されていると思われるMainWindowTitleプロパティが表示されています。あなたが最初にそれを求めるとき、値を取得するためにすべてのOSのgubbinsを実行しています。

はこれをテストするには、試してみてください。私はあなたが最初から非常に高速右になります見つけることだと思う

if (processes[0] != null) 

+0

+1よく聞こえます – Jonno

+0

ええ、あなたは絶対に正しいです。私はベンチマークのために間違った場所を探していた。 MainWindowTitleはタイトルが最初にキャッシュされているかどうかをチェックします。もしそれができないのであれば、それを得るためのネイティブマジックはありません。ありがとう。 – Dave