2009-03-12 15 views
2

かなり複雑なサイトのためにLinqをSQLに使用しています。ライブに行くと、データベースのタイムアウトがいくつかありました。私が気づいた最初のことは、データベースへの接続がかなり多いということでした。LinqからSQLへの接続

ADO.netのバックグラウンドから、すべてのサイトで1つまたは2つのプールされた接続のみが使用されるようにコードを作成しました。これにより、かなりの数の同時ユーザーでも許容できるパフォーマンスが得られました。

私の質問は、この古い方法で欠陥があったか、それともLINQを行う方法ですか?私たちのパフォーマンスの問題は、DBへの接続が多いために発生しているようですが、これが問題であれば、LINQのすべてのチュートリアルで言及されると思っていました。

提案がありますか?

答えて

3

私はあなたがDataContextを保持していて、完了したらDisposeを呼び出さないことを推測しています。

DataContextを初期化し、操作を実行し、完了したら処理してください。操作の間に参照を保持しないでください。

好ましくは、IDisposableの呼び出しを処理するためにusingステートメントを使用します。

接続プールに関して、SqlClientはデフォルトで接続をプールします。したがって、明示的に無効にしない限り、既にそれを利用しているはずです。もちろん、あなたが使用している接続を解放していない場合は、プーリングするだけでこれまでのところあなたを連れてきます。

+0

ガーベッジコレクタは、データコンテキストを廃棄するのを手伝っていませんか?または、トラフィック量の多いサイトでは、短時間で開いているDataContextが多すぎるため、小規模な期間ではガベージコレクタが遅すぎる可能性がありますか? –

+0

@Adrian Grigore:GCは最終的にデータコンテキストを破棄しますが、データコンテキストは開いているデータベース接続を保持しているため、完了したら明示的に閉じたいと考えています。 – casperOne

+0

私はそこにdatacontextを使用しているので、適切に処分されています。しかし、私は接続を閉じる必要があるだろうと気付かなかった...これはどこに文書化されていますか? – ColinRobertson

関連する問題