2

次のようなコードがあります。

    public void SomeMethodThatLoadsUserData()
    {
       Stopwatch sw = new Stopwatch();
       sw.Start();

       Parallel.Invoke(Method1, Method2, .... , Method12);

       sw.Stop();
       var t = sw.ElapsedMilliseconds;
}

これらの各メソッドは、データベースでクエリを呼び出すことになります。[デバッグ] ボタンをクリックして、このコードを初めて実行すると、約 1200 ミリ秒かかります。そして、約 10 回再起動ボタンを押すと、平均して約 220 ミリ秒の結果が得られます。

この大きなギャップは、A ) アプリケーションが初めて何らかのコンパイルを実行する必要があり、実稼働環境での実際の結果がラップトップで取得している 220 ミリ秒の平均に近づくという事実によるものですか、または B ) データがSQLサーバーにキャッシュされ、再起動するとデータがキャッシュから読み取られるため、本番環境でのメソッドの実際のパフォーマンスは、実際には最初の実行で見られる1200ミリ秒に近くなります.

これらの数値の読み方についてご提案いただきありがとうございます。

4

1 に答える 1

1

これは、データベースへのクエリ方法に応じて、キャッシュが原因である可能性があります (orm はキャッシュする可能性があり、DB はキャッシュを行うなど)。考慮すべき点がいくつかあります。

  • このメソッドを 1 回だけ実行しても何も言われません。数百回実行して平均を取ります。そのため、起動時間、コールド キャッシュ、および .NET ランタイムが実行時にロードする必要のあるものを排除できます。
  • データベースをモックして、DB 側でキャッシュが発生するかどうか、またはレイテンシーが影響を与えるかどうかを確認します
  • 多くの DB には、特に使用している DB の SQL クエリを最適化するのに役立つツールがあります。クエリのベンチマークを行う場合は、これらを使用してください。
  • より最適化されている可能性があるため、リリース ビルドでベンチマークを実行します。
于 2012-07-22T20:48:41.590 に答える