-1

Visual Studio 2008 で C# を使用しています。リスト ビューをバインドする aspx ページがあります。データは 8 つのテーブルからアクセスされます。

最大のパフォーマンスを得るには、コード ビハインドのストアド プロシージャと linq のどちらを優先する必要がありますか?

ネットワーク トラフィックが最も少ないのはどれですか。

4

2 に答える 2

2

ストアド プロシージャは、ほとんどの場合、より高速であり、クエリの実行をより細かく制御できますが、トラフィックの少ないプロジェクトや開発スケジュールが非常に短いプロジェクトでは、ストアド プロシージャを構築するための開発時間が正当化されない場合があります。

于 2012-04-28T10:04:09.047 に答える
2

これはほとんどの場合状況に依存し、データのサイズにも依存します。
また、何よりもまず、チームの現在のコーディング標準とパターンを常に確認してください。あなたの会社の標準が常に SPROCS を使用すると言っている場合は、それらの標準に準拠するよりも優先されます。

多くのレコード (SPROC)
テーブル内の期待されるデータがそれぞれ数十万レコードである可能性がある場合、LINQ でデータの小さなサブセットを取得するためだけに返される 8 つのテーブルに対して合計で 100 万のレコードを持つことは、完全なオーバーヘッドになる可能性があります。

LINQ は、予想される結果セットが構築されるまで、現在反復処理しているレコードをメモリ内に保持します。これは、メモリ内の 100 万件のレコードすべて + メモリ内の結果セットのレコードになる可能性が最も高いでしょう。

また、Visual Studio には (RAM の量に関係なく) 2GB のメモリの制限があることに注意してください (32 ビット システムでのデバッグ モード中、64 ビットについてはわかりません)。過去に、LINQ を使用して大規模なデータ セットをクエリすると、メモリ不足の例外が発生するという問題がありました。

その場合、SPROC の方が高速で安全かもしれません。

少数のレコード (LINQ)
一方、8 つのテーブルのそれぞれのデータが常にかなり小さく、将来もあまり変化しない場合は、LINQ を使用してもほとんど違いはありません。ただし、複数のテーブル結合が SPROC よりも LINQ の方が遅くなる可能性があるかどうかをテストしてください。

編集 (実行プランの比較/分析)
また、LINQ を使用して結合用に生成された SQL は、ほとんどの場合、.NET 4.0 で非常に効率的であることに注意してください。.NET 3/3.5 についてはわかりませんが、SQL プロファイラーを使用すると、生成された SQL を確認して実行できます。 SQL で SPROC 実行計画と比較します。

于 2012-04-28T10:23:30.773 に答える