Что удаляется при вызове SqlCommand.Dispose? - PullRequest
3 голосов
/ 01 декабря 2009

Теоретически, поскольку SqlCommand реализует IDisposable, объект SqlCommand должен всегда располагаться. Я лично обертываю заявление об их использовании. Однако я вижу много кода, который никогда не избавляется от объектов SqlCommand без каких-либо явных проблем.

Я понимаю, что финализаторы в конечном итоге будут вызываться сборщиком мусора, но поскольку в большинстве случаев это может занять довольно много времени (и никогда в других), почему код не падает из-за нехватки какого-либо ресурса?

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

1 Ответ

2 голосов
/ 01 декабря 2009

Похоже, он вызывает метод Dispose базового класса (Component) и запускает сборку мусора ...

Public Sub Dispose(ByVal disposing As Boolean)
    If disposing Then 'Same as Component.Dispose()            
        SyncLock Me
            If Me.site IsNot Nothing AndAlso Me.site.Container IsNot Nothing Then
                Me.site.Container.Remove(Me)
            End If
            If Me.events IsNot Nothing Then
                Dim handler As EventHandler = DirectCast(Me.events.Item(Component.EventDisposed), EventHandler)
                If handler IsNot Nothing Then
                    handler.Invoke(Me, EventArgs.Empty)
                End If
            End If
        End SyncLock
    End If

    GC.SuppressFinalize(Me)
End Sub

Я получил это с помощью Отражатель .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...