2012-03-21 37 views
1

これは私がいつも不思議に思っていたものです。アプリケーションが終了すると、DB接続はすぐに終了しますか?

私はDB接続を使用するコードを書くたびに、私はいつも何らかの形で次の部分への処理の前に閉じていることを確認する必要があります。

しかし、そのコンストラクタで接続を開き、SaveボタンまたはCancelボタンに当たるまで閉じないChildWindowがある場合は、その後、アプリケーション全体が閉じられた場合、DB接続はすぐに終了しますか?または、タイムアウトを待つ必要があり、自動的に閉じますか?

EDIT:

だから私は自分のアプリケーションにすべてのエラーを記録するためのオープンなライブ接続を維持しようとしています:

public App() 
{ 

    ErrorHelper errorHelper = new ErrorHelper(); // Will open DB connection 
    AppDomain currentDomain = AppDomain.CurrentDomain; 
    currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException); 

} 

/// <summary> 
/// For catch all exception and put them into log 
/// </summary> 
void currentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 

    errorHelper.WriteError(e.ExceptionObject as Exception);    

} 

私は毎回、単一のエラーを記録接続を開く方法が好きではないので私はいつもコネクションを開いておきたいと思っています。これはOPの説明と同様です。この状況では、常に接続を開いたままにします。しかし、DB接続は終了後即座に終了しますか?

+1

@Oded、私は既存のアプリケーションの動作について何も仮定していません。 – mikerobi

+0

リクエストに応じて、私は働いているものをパットしました。しかし、mikerobiのように、私はアプリケーションを終了する動作について知りたい。接続を確実に閉じるための回避策はありません。 –

答えて

2

短いと簡単な答え:

using (var db = new Connection()) 
{ 
    ... 
} 

、その後、あなたが心配する必要はありません - それはスコープの外に出るとき、それはちょうど近くに、それはの終わりになるでしょう:常に using声明の中で、あなたの接続を使用メソッド、例外、またはアプリケーションをシャットダウンします。

+2

真実ですが、質問に答えていません。 –

+0

しかしあなたの質問は明確ではありません - あなたは何を達成しようとしていますか?接続が完了するとわかっていますか?接続がいつ終了するのか知っていますか?あなたはあなたの質問が仮説ではないことを@Odedに伝えました。具体的にする。 –

+0

@OferZelig私はちょうどアプリケーションが閉じるかどうか、開いているすべてのDB接続が即座に閉じるかどうかを知りたいですか?だから私は、DB接続が長い間保持される可能性があるかどうか心配する必要はありません。 (1000人のユーザーがアプリケーションを実行したとしますが、アプリケーション終了後すぐに接続が終了しない場合は、しばらく待ってから終了してください。未使用の接続が多数ある可能性があります)私は問題を複雑にしています。しかし、私はちょうど何が起こるか明確な考えをしたい。 –

2

私はいつも接続を開いているのが好きではないため、1つのエラーを記録しています。そのため、常に接続を開いたままにします。

これが接続プーリングの対象です。あなたのパフォーマンスを測定しましたか、これが問題であるという強い証拠を確認しましたか?

ブロックをusingブロックで開いて閉じ、接続プールにそのジョブを許可させます。

プロセスが終了すると、接続は終了します。

+0

'Using'ブロックは基本的に' try {...} finally {obj.Dispose()} 'です。私がNexusDBを使用していたとき(ええ、有名ではない)、ADOとのオープンな接続は、毎回書くよりもはるかに遅いです。 –

+1

@King Chan ADO.NETには接続プーリングがあります。 http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx – dotjoe

+0

@dotjoe Ooooh、わかりました。それを読んだ後。私はちょうどADOオープン接続(MsSQLで)のパフォーマンスを常にテストし、必要なときに開いている小さなプログラムを作成しました。それはまったく同じです。奇妙な...それから、NexusDBでテストするとどうしてもっと遅くなるのですか?+1 –

関連する問題