Warum ist eine explizite Dispose () -Methode in asp.net MVC Controllern erforderlich? Kann jemand seine Feinheiten erklären? (asp.net spezifisch)
Ich weiß, C# Ressource verwalten kann ziemlich gut mit seinem garbage collector. Aber da hat es, dass, was ist das genau und warum ist Sie nötig?
Kann mir jemand erklären, warum .Dispose()
ist erforderlich asp.net mvc?
Auch, was es bedeutet zu Entsorgen Verbindung? Warum ist es notwendig? Wer weiß, die Feinheiten, warum es wichtig ist zu entsorgen, eine Datenbank-Verbindung wie in db.Dispose()
? Ist dieser EF-verwandten, - oder SQL Server-bezogenen? Ich versuche zu verstehen, warum genau.
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
InformationsquelleAutor der Frage Jan Carlo Viray | 2012-04-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dispose
ist für die Freigabe von "unmanaged" Ressourcen (z.B. sockets, file-handles, Bitmap-Griffe, etc), und wenn es genannt wird, außerhalb ein finalizer (das ist, was diedisposing
Flagge bedeutet, BTW), für die Entsorgung anderer IDisposable-Objekten, die er hält, die nicht mehr nützlich sind."Unmanaged" Ressourcen werden nicht von der CLR verwaltet wird (daher der name), und GC nicht Durcheinander mit Ihnen oder Sie alle durch sich selbst, ohne eine
Dispose
Methode (und den code tatsächlich!), es werde verlassen Sie sich auf das Objekt finalizer zu bereinigen. Schließlich wird der finalizer ausgeführt wird (wenn die app ist gesund, und das Objekt hat einen finalizer), und wenn Sie den finalizer macht seinen job, dann ist alles halb OK....aber es wird nehmen Sie Ihre süße Zeit dabei-und wenn man die Griffe in der Zwischenzeit, oh gut. Schade für die anderen thread/Prozess/was auch immer brauchte.Wenn Sie
Dispose
obwohl die Ressourcen sofort freigegeben, und die Dinge besser laufen alle rund.(By the way, ist dies nicht darauf beschränkt, EF, SQL Server oder eine andere Technologie. Das dispose-Muster findet sich in der .net framework, und es gilt als gute Praxis, um es auszunutzen, wenn eine IDisposable-das ist nicht mehr verwendet werden.)
Als für warum
IDisposable
implementiert ist, so weit oben am Baum, anstatt Sie einfach implementieren es auf einem Fall von Fall-basis...ich bin nicht 100% sicher. Aber stellen Sie sich vor Sie schreiben einen Rahmen. Bedenken Sie, dass, wenn alles, was nicht ein IDisposable, Sie müssten zu überprüfen-jedes mal, wenn Sie wollte etwas loswerden! -- ob das Objekt Einweg-undDispose
es, wenn so. Wenn Sie stattdessen implementieren Sie IDisposable "just in case", wenn die Dinge vereinfacht-man sollte nur immer entsorgen. (Wenn ein Objekt nicht über etwas zu bereinigen, hat es einfach nicht überschreibenDispose
-- in dem Fall seine ElternDispose
aufgerufen wird und tut, was auch immer Aufräumen muss, die können da auch nichts...) Und es ist ein normaler Fall für den Controller zu haben, Sachen zu bereinigen, dass, selbst wenn das nicht der eigentliche Grund, es macht eine Menge Sinn, zu tun, sowieso.InformationsquelleAutor der Antwort cHao