Лучший способ закрыть Access Jet OledbConnection - PullRequest
0 голосов
/ 15 декабря 2011

В моем приложении winform - framework 3.5 sp1 - у меня есть собственный Data-Reader. Я должен выбрать способ закрыть соединение

Первый способ:

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 ]

3 голосов
/ 15 декабря 2011

Лучше всего использовать с использованием блока , он будет располагать объект, как только вы выйдете из блока.

Вы НЕ ДОЛЖНЫ ЖДАТЬ для ГХзакрыть дб соединение.Мы никогда не сможем предсказать время выполнения объектов сбора GC.

2 голосов
/ 15 декабря 2011

Вообще говоря, вы должны закрывать каждое соединение, которое открываете сами. Сборка мусора не даст вам никаких гарантий о том, когда это произойдет. Скорее всего, у вас возникнут утечки, и вы заблокируете выполнение запросов в будущем.

С MSDN :

Сборка мусора происходит, когда одно из следующих условий правда:

В системе недостаточно физической памяти.

Память, которая используется выделенными объектами в управляемой куче превосходит приемлемый порог. Это означает, что порог допустимое использование памяти было превышено в управляемой куче. это порог непрерывно регулируется в процессе работы.

Вызывается метод GC.Collect. Почти во всех случаях у вас нет чтобы вызвать этот метод, потому что сборщик мусора работает непрерывно. Этот метод в основном используется для уникальных ситуаций и тестирования.

Если вы вызываете cn.close, вам следует использовать блок try catch finally, чтобы убедиться, что соединение всегда закрывается даже при исключении.

...