これはこれまでに起こったことではなかったので、私はこれを引き起こしていると仮定していますが、それが何であるかはわかりません。Linq2Sqlがsproc呼び出しごとに新しい接続を作成し、それを開いたままにしているのはなぜですか?
SQL Server 2005データベースに対してlinq2sqlを設定しました。私はストアドプロシージャを使用しています。
私の手順の大半はうまくいきますが、この1つの特定のアップデートプロシージャは、数百回も連続して(ヘッダレコードの詳細のクローン作成)実行されることがあります。
これはタイムアウトの原因となり、開いている接続を確認するスクリプトを実行すると、すべてのスリープ状態とスペースを占有していることがわかります。
どのようなご意見、アドバイスですか?
私のDataContextは、サービスクラスの静的変数として設定され:
private static WarehouseSystemDataContext dc
{
get
{
// It is being passed a closed SqlConnection object
WarehouseSystemDataContext _dc =
new WarehouseSystemDataContext(Constants.getWarehouseSystemConn());
_dc.ObjectTrackingEnabled = false;
_dc.CommandTimeout = 600;
return _dc;
}
}
を参照されるたびに作成している私は、それはあなたのことは言うまでもない仮定'using'ブロックで' dc'の消費者を常に囲みますか? ( '(foo.dc){...}'を使用して) –
私は通常ではありません。私の以前の理解は、linq2sqlがあなたのための接続のオープンとクローズを管理することでした。この問題のために、私は使用ブロックを追加しましたが、まだ運がありません。 – IronicMuffin
linq2sqlは状態を適切に管理することがあり、時には状態を管理しないことがあります。結果セットを完全に反復処理すると、最後に結果セットが閉じられます。私は '.Single'を使うときにはそうでないことを発見しました。つまり、GC接続時に接続は処分されますが、後で問題が発生することがあります。 –