Visual Studio 2008でC#を使用しています。リストビューをバインドするaspxページがあります。データは8つのテーブルからアクセスされます。LINQまたはストアドプロシージャ?どちらが有利ですか?
パフォーマンスの最大化、ストアドプロシージャまたはlinqのコードの背後にあるのはどちらですか?
どのネットワークトラフィックが最小限に抑えられていますか?
Visual Studio 2008でC#を使用しています。リストビューをバインドするaspxページがあります。データは8つのテーブルからアクセスされます。LINQまたはストアドプロシージャ?どちらが有利ですか?
パフォーマンスの最大化、ストアドプロシージャまたはlinqのコードの背後にあるのはどちらですか?
どのネットワークトラフィックが最小限に抑えられていますか?
ほとんどの場合、ストアドプロシージャは高速でクエリの実行を制御できますが、トラフィックの少ないプロジェクトや非常に短い開発スケジュールのプロジェクトでは、ストアドプロシージャを開発する時間を正当化できない場合があります。
+1、これはかなり簡潔にまとめられ、まさに正しいです。 –
@EJBrennan:企業の標準とパターンを考慮せず、純粋にベースレベルで、アプリケーションに返されたテーブルのデータをすでに持っていて、テーブルが数百レコードしかない場合、上に別のSPROCを書くLINQを使用するのではなく、あなたのアプリで既に返されたテーブルを結合することは、私の意見では不必要なオーバーヘッドになります。 – Nope
正常に作成され、適切にパラメータ化されたクエリは、通常、すべてのストアドプロシージャと同じ速さです。速度はストアドプロシージャの主な利点ではありません。これはセキュリティに関するものです(データベースユーザーが選択したデータに直接アクセスする必要はありません) –
ほとんどの場合状況がよく、データのサイズによっても異なります。
また、まず第一に、チームの現在のコーディング基準とパターンが何であるかを確認してください。あなたの会社の標準がSPROCSを常に使用していると言えば、その標準に準拠するよりも。表中の予想されるデータは、おそらく数百万人もができればレコード(SPROC)
の
多く、それぞれが、それは8つのテーブルが取得するためにだけ戻っための完全なオーバーヘッドは合計で万レコードを持っているかもしれない記録しますLINQでデータの小さなサブセット。
LINQは、現在期待される結果セットが構築されるまで、メモリ内のレコードを繰り返し保持します。これはおそらく、メモリ内のすべての100万レコード+メモリ内の結果セットのレコードで終わるでしょう。
また、Visual Studioには(32bitシステムのデバッグモードでは、64bitについてはわかりませんが)顔面よりも2GBのメモリの容量が制限されています(RAMの容量に関係なく)。私は過去にLINQを使用して大量のデータセットを照会する問題を抱えていました。これにより、メモリの例外が発生しました。
この場合、SPROCはもっと速くて安全かもしれません。
少数のレコード(LINQ)
8つのテーブルの各データは、常に、LINQは少し違いを生むだろう使用するよりも、将来的にはあまり変化していない、むしろ少なくなる一方場合。ただし、複数のテーブル結合がLINQでSPROCよりも遅い場合は、テストしてください。
編集(実行計画を分析/比較)
はまた、LINQを使用して参加するために生成SQLは、あなた、ほとんどの場合、.NET 4.0で.NET 3/3.5わから非常に効率的ではありませんが、SQLプロファイラを使用していることに注意してくださいSQLを生成してSQLで実行し、それをSPROC実行計画と比較することができます。
一般的には、LINQクエリが表示されないと言うのは難しいです。 – dasblinkenlight
可能な複製http://stackoverflow.com/questions/14530/linq-to-sql-vs-stored-procedures – Nope