IIS-Anwendungspool und .NET-garbage collection
Betrachten ASP.NET Anwendung mit Verbindung der pool-Speicherverlust-problem (wo die Anschlüsse sind nicht richtig geschlossen wird, zum Beispiel).
Bedeutet recycling der application-Pools klar die Verbindung pool (wodurch mehr verbindungen gemacht werden)?
Wenn die verbindungen bleiben im Speicher, bis der Garbage Collector entfernt werden, geschieht dies, wenn der Anwendungspool neu gestartet wird (oder werden/können Sie sich Links über das)? Ich verstehe auch den Garbage Collector konnte, reinigen Sie Sie jederzeit, aber Sie sind immer noch in Gebrauch und kann nicht gesammelt werden, bis ein reset-oder Anwendungspool neu gestartet?
Ich bin überprüfung ein system, wo das Ziel ist natürlich den code korrigiert verwalten Sie die verbindungen richtig, und ich bin versucht zu gewinnen, mehr Verständnis über die garbage collection/application pool Prozess.
InformationsquelleAutor davidsleeps | 2009-07-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, das recycling der app-pool tötet und startet den IIS-Prozess verantwortlich, für die Ihre Anwendung ausgeführt wird. Alle Ressourcen werden freigegeben, an diesem Punkt, einfach, weil der Prozess beendet wird.
Wenn der Prozess nie gestartet und einfach Lecks Griffe, der garbage collector wird schließlich sauber zu machen. Es ist jedoch wahrscheinlich, dass Sie laufen aus Griffe für was auch immer Ressource, die undicht ist, bevor dies geschieht. Dies ist, warum es wichtig ist, rufen Sie Dispose() auf diese Objekte(vorzugsweise von der "mit" - Muster), so dass die Ressourcen werden freigegeben, sobald die app fertig ist mit Ihnen und nicht, wenn der garbage collector kommt.
InformationsquelleAutor Jesse Weigert
Einen Verbindungs-pool, ein Zwischenspeicher von Datenbankverbindungen. Ein Anwendungspool ist eine (oder mehr) in Arbeitsprozesse. Also, wenn Sie den Computer Herunterfahren, den Anwendungspool, den Sie heruntergefahren Ihre Arbeitsprozesse und Inbetriebnahme von neuen Arbeitsprozessen; in diesem Fall wird der pool wird zerstört, und alle verbindungen im connection-pool geschlossen.
Wenn Sie keine Close oder Dispose aufrufen, die auf eine Verbindung und verlassen Sie sich auf den garbage collector dann ist die Verbindung kann oder kann nicht an den pool zurückgegeben. Ich denke, es wird nur Hinzugefügt werden, zurück zum pool, wenn die Verbindung immer noch gültig und die maximale Poolgröße wurde erreicht. Wie Sie wahrscheinlich wissen, sollten Sie nie verlassen sich auf den garbage collector. Eine einfache Möglichkeit, um sicherzustellen, die Verbindung Angeordnet ist, ist die Verwendung der using-Anweisung, die automatisch den Aufruf von Dispose am Ende des code-Blocks.
In ADO.NET 2.0 gibt es neue Methoden, um programmgesteuert verwalten des pools: ClearAllPools und ClearPool. Dies könnte Ihnen helfen, mit Ihrem problem, bis Sie das beheben können, alle Daten Zugriff-code.
Das ist, was es Klang wie...es ist schon komisch/traurig, wie die gleichen Fehler zeigen sich wieder und wieder.
InformationsquelleAutor Randy Levy