0

単純なASP.NETMVCWebアプリケーションと(ローカルの)SQLServerがあるとします。ORMとして、私はEntityFramework4.3.1を使用しています

ORM側でかかる時間を把握するために、単純な選択クエリを用意し、次のようなタイムスタンプを出力しました。

 ...
 using (var context = Entities()) 
 {
     (1) timestamp1
     var list = context.Database.SqlQuery<Entity>("select * from entities").ToList();
     (2) timestamp2
 }
 ...

同時に、SQL Server Profilerを監視して、クエリの開始時刻と終了時刻を確認しました。

結果は次のようになります(クエリ処理時間は1秒未満であるため、ミリ秒のみが表示されることに注意してください)

  1. タイムスタンプ1:149ミリ秒
  2. クエリ開始時間:197ミリ秒
  3. クエリ終了時間:198ミリ秒
  4. タイムスタンプ2:199ミリ秒

質問)クエリを開始する前に、なぜこれほど多くの時間(48ミリ秒、197-149ミリ秒)がかかったのですか?これを減らす方法はありますか?

ありがとう!

4

1 に答える 1

0

ADO.NET EF はそれ自体を初期化する必要があります。今後のクエリはそれほど遅延なく実行されることがわかります。また、SQL Server Profiler はクエリの実行時間のみをログに記録し、ネットワーク トランスポートやその他のオーバーヘッドに関連する時間は記録しないことを忘れないでください。

SQL Server のアクティブ化に関連する速度低下もある可能性があります。これはコンピューター上でローカルにあると言われているため、SQL Server のコンポーネントがディスクにページアウトされた可能性があります。専用の SQL Server ボックスに対して実行した場合のパフォーマンスはどのようなものですか?

于 2012-06-23T20:06:00.370 に答える