質問: conn.Query("spProc", param: new { /*params here*/ }, commandType: CommandType.StoredProcedure, commandTimeout: 300).ToList(); } ``` 結果変数を使用範囲外に移動すると、パフォーマンスが大幅に向上するのはなぜですか?
回答: それが事実である理由はありません。この場合、データベースサーバーのボトルネックが原因であると思われます。おそらく、最初にデータをメモリに効率的に準備しています(遅いもの、ディスクが必要な場所)。おそらくサーバーの競合やネットワークのスループットの問題です。 2つの例で説明する内容は、変数が宣言されている場所の違いではなく、基礎となるデータソースによってのみ発生する可能性があります。 マイナーな注意点としては: `AsList()`することが好ましい`ToList()`が、これはあまりにも:だけあなたの時間(ミリ秒よりもおそらく少ない)の小さなスライバーを保存します。 プロファイリングの際には、 * IDEなしでリリースモードで動作する * JITを実行し、すべての外部ソースを最初にプライミングします。通常は、タイミングを開始する*前*に少なくとも1回は実行します。 * すべてを何回も測定します(高速動作の場合、平均を得るために数千回行うのが普通です - 明らかに反復ごとに30秒かかる場合はそうではありません) * GCなどを事前に強制して、追加のGCがテスト対象の障害に過ぎないようにします * テストマシン/サーバ/ネットワーク上で競合することを避けよう