2011-12-15 50 views
0

在我的winform應用程序 - framework 3.5 sp1中 - 我有一個自定義數據讀取器。我不得不選擇的方式關閉連接關閉Access Jet的最佳方法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你應該使用一個嘗試catch finally塊,以確保連接始終關閉甚至例外。

3

最好是使用塊使用,它將只要你搬出塊處分的對象。

一定不要等待爲GC關閉數據庫連接。我們永遠無法預測GC採集對象的執行時間。

+0

關於使用Using塊的實質。即使遇到異常,它也允許連接關閉。 +1 – Jay 2011-12-15 11:14:48