2011-12-15 2 views
0

私のwinformアプリケーションで - フレームワーク3.5 sp1 - 私はカスタムデータリーダーを持っています。第二の方法をアクセスジェットOledbConnectionを閉じる最善の方法

Private cn As OleDb.OleDbConnection = Nothing 

Public Sub Open() 
    cn = New OleDb.OleDbConnection(sConnectionString) 
    cn.Open() 

    ' ... 

End Sub 

Public Sub Close() 

    ' ... 

    cn.Close() 
    cn.Dispose() 
End Sub 

:私は、接続に

まず道を閉鎖する方法を選択する必要が第二の方法で

Public Sub Open() 
    Dim cn As New OleDb.OleDbConnection(sConnectionString) 
    cn.Open() 

    ' ... 

End Sub 

Public Sub Close() 

    ' ... 

End Sub 

は、接続を閉じるガベージコレクタです。何が良いですか? ありがとうございました! Pileggi

答えて

2

一般的に言えば、自分で開いたすべての接続を閉じる必要があります。ガベージコレクションでは、いつ発生するかは保証されません。おそらくリークが発生し、将来のクエリの実行がブロックされます。 MSDNから

システムが低い物理メモリ:以下のいずれかの条件に該当 あるとき

ガベージコレクションが発生しました。

管理対象ヒープ上の割り当て済みオブジェクトによって使用されるメモリ は許容可能なしきい値を超えています。これは、管理可能なヒープ上で受け入れ可能なメモリ使用量のしきい値が を超えたことを意味します。この のしきい値は、プロセスの実行中に継続的に調整されます。

GC.Collectメソッドが呼び出されます。ほとんどの場合、このメソッドを呼び出すには がありません。これは、ガベージコレクタが継続的に実行されるためです。 このメソッドは、主に固有の状況とテストに使用されます。

cn.closeを呼び出す場合は、try catch finallyブロックを使用して、例外が発生しても接続が常に閉じられることを確認する必要があります。

3

ブロックを使用してを使用することをお勧めします。ブロックから移動するとすぐにオブジェクトが破棄されます。

あなたはGC接続でdb接続を終了しないでください。 GC収集オブジェクトの実行時間は決して予測できません。

+0

「使用」ブロックを使用している点についての実線です。例外が発生しても接続を閉じることができます。 +1 – Jay

関連する問題