3 Stimmen

Was wird entsorgt, wenn SqlCommand.Dispose aufgerufen wird?

Da SqlCommand IDisposable implementiert, sollte ein SqlCommand-Objekt theoretisch immer entsorgt werden. Ich persönlich wickle eine using-Anweisung um sie herum. Allerdings sehe ich viele Code, der nie von SqlCommand-Objekte ohne offensichtliche Probleme entsorgt.

Ich verstehe, dass Finalizer schließlich von Garbage Collection aufgerufen werden, aber da das in den meisten Fällen eine ganze Weile dauern kann (und in anderen Fällen nie), warum stürzt der Code nicht ab, weil ihm eine Ressource ausgeht?

In unserer eigenen Codebasis haben wir einen Code, der rund um die Uhr läuft, ohne Befehle auszulösen. Ich würde das gerne bereinigen, aber es ist schwer zu rechtfertigen, wenn es keine Probleme verursacht.

2voto

Josh Stodola Punkte 79569

Sieht für mich so aus, als ob es die Dispose-Methode der Basisklasse (Component) aufruft und die Garbage Collection in Gang setzt...

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

Ich habe dies durch die Verwendung von Reflektor .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X