2017-03-21 6 views
2

データベースとの接続を確立すると、ADO.NETはメモリ内にプールを作成します。私は接続を閉じるか、接続を破棄するときにメモリから削除されていないことを知っています。接続文字列が同じである限り、接続プールから接続が取得されます。私はこの2つの質問があります:接続プールがメモリから解放されるときADO.NETでは?

  1. この接続プールはフォームメモリから解放されますか?
  2. 分散トランザクション(トランザクションスコープ)の場合、ADO.NETは接続プーリングを使用しないと聞きました。それは真実か偽ですか?

答えて

1

1)接続プーラーは、約4-8分間アイドル状態になってからプールから接続を削除します。また、ADO.NET 2.0には、ClearAllPoolsとClearPoolの2つの新しい方法があります。 ClearAllPoolsは特定のプロバイダの接続プールをクリアし、ClearPoolは特定の接続に関連付けられている接続プールをクリアします。

2)それは本当です。

接続を開いた後に開始されたトランザクションを登録する必要がある場合は、使用しているプロバイダのDbConnectionオブジェクトのEnlistTransactionメソッドを使用して既存の分散トランザクションに参加できます。既存の分散トランザクションに登録すると、トランザクションがコミットまたはロールバックされた場合、データソースのコードによる変更もコミットまたはロールバックされます。

+0

回答ありがとうございました。実際に接続プールを削除するために任意の時間値を設定することが可能> – Umer

+0

はいできます。しかし、あなたの接続をクリアするための多くの方法。私はあなたがClearPoolメソッドを呼び出すことができると述べたように(処理する最善の方法)、すべてのアクションを "使用する"ことができるので、すべての接続を処分できます。また、これについてのトピックがあります、あなたはそれをチェックアウトすることができます。 http://stackoverflow.com/questions/2748706/connection-timeout-and-connection-lifetime –

+0

2)その真実。 TransactionScopeがMS-DTCを使用している場合にのみtrue、MS-DTCにエスカレートしていない場合はfalseですか? –

関連する問題