Ohoh ....非常に多くの悪い習慣。
パート2:そう遠くない 過去に最適化、ADO.Netの日、私は、 ストアドプロシージャを記述 のDataReaderを経由して、それを実行し、その後 のDataReaderをループ、私のように多くのオブジェクトを塗りつぶすために使用されます モデルクラスで、DataGridにバインドするコレクションの コレクションを渡します。 LINQ日で、私はもっと遠くに と同じように、オブジェクトのコレクションを作成します。 です。しかし、私は直接 LINQ文を実行します。私は、ストアドプロシージャをSQL が 私より高速なパフォーマンスが得られます推測することができますが、
は基本的には、過去には、いくつかのマイナーなdlusionsを持っていました。ストアドプロシージャでは、10年以上前からNO(!)のパフォーマンスが向上しています。それは明らかにドキュメントで綴られています。 SQLの実行は非ストアドプロシージャと同じくらい速く、クエリプランはキャッシュされ、両方のために再利用されます。
往復を避ける(つまり、クライアントからサーバーへの複数のバッチの要求を送信する)場合、SPは有効です(保存時間など)。そして、節約は、彼らが蓄積された手続きであるという事実によるものではなく、ラウンドトリップが費用のかかるという事実のためです。
悲しいことに、悲しいことに、多くのプログラマは、それらを手に入れた他の人たちから彼らを得るために妄想を抱いています... 10年前、ストアドプロシージャには本質的な利点がありました。これがSQL Server 6.5の時間です。7.0以降、これは歴史です。
http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx
基本的には、失われた開発時間と....に対する無用のコードの多くmostlikely測定できない利点を扱います。
パート1:接続が& 最適化をプールする:私は、LINQは、データベースへの唯一の1 接続を確立していることを確認し、また 接続プーリングをたどる できる方法を知りたいです。
あなたはいません。基本的には、あなたよりも賢くなるようにはしないでください。何が問題なのですか?
プールするには、(sql server)が接続文字列に何かを置く必要はありません。もちろん、LINQは接続文字列で定義された接続プールを迂回することはありません。 LINQはこれまでデータベースと話していませんでした.ADO.NETを使用していますが、ADO.NETでは魔法のように動作が変わっていません。これは、上位レベルのORMが代わりに使用しているからです。接続文字列にはプーリングエントリがありますが、ADO.NETは引き続きそれらを参照し、それに従います。
ここで、サーバープールからのデータベース接続を1つだけ持つことがSTUPIDです。 ouを一度に1つのトランザクションに制限し、負荷が高くなると(つまり、複数の要求を同時に処理する必要がある場合)、パフォーマンスを完全に破棄します。
私はパートに関連するデータを扱う 私のコードのブロックを「使用」 でのDataContextオブジェクトを使用します。これは なぜLINQが複数の接続 を使用している可能性がありますか? DataContextをクラスレベルの変数として使用している場合、 は1つの接続のみを保証しますか?
Ah - 依存します。それは意味をなさないかもしれないが、そうでないかもしれない。あなたが問題を抱えていると思う前に、特にあなたがここで与えた情報量が多すぎる場合(つまり、none)、唯一の賢明なことをしてください:プロファイラをつかんで、あなたが持っているかどうかを測る。 Openng /接続を100回または1000回閉じることは、プロファイラに表示されません。何も問題を解決する必要はありません。
しかし、私はメソッドごとの接続のオープニングが好きではありません - それは通常、悪いクラスデザインを示しています。接続は作業単位内で再使用する必要があります。
実際のパフォーマンスの問題は何ですか? – Phill
データアクセスが遅いため、全体的なパフォーマンスが低下します。 –
です。したがって、問題はORMまたは接続プーリングではなく、データベース自体です。 – Phill