2009-04-01 6 views
6

Ich bin vertraut mit dem Muster try {} finally {}, dem Muster using() {}, um zu gewährleisten, dass Dispose() aufgerufen wird, aber für eine ASP.NET-Seite ist es genauso sicher, Objekte zu entsorgen im Seitenbereich beim Page_Unload-Ereignis erstellt? Wäre es sinnvoll, stattdessen die Methode Dispose() der Seite zu überschreiben?Ist es sicher zu glauben, dass Page_Unload immer ausgeführt wird und ein guter Ort für den Dispose() - Code ist?

Ich bin mir nicht sicher, welcher Code das Page_Unload-Ereignis oder die Page Dispose() -Methode auslöst, daher weiß ich nicht, was garantiert wird, dass es ausgeführt wird.

Antwort

9

Das Entladeereignis wird kurz vor der Entsorgung in der Kontrolllebensdauer ausgelöst. Da die Seite selbst ein Steuerelement ist, wird auch das Entladeereignis ausgelöst. Jedes Steuerelement, das Sie der Seite hinzufügen, ist Teil des Seitenlebenszyklus. Wenn Sie also ein Steuerelement haben, das aufgeräumt werden muss, sollte das Steuerelement selbst jede mögliche Bereinigung selbst behandeln. Sie sollten sich darüber keine Gedanken machen müssen, vorausgesetzt, das Steuerelement wurde der Seite hinzugefügt und entspricht dem Verkapselungsprinzip.

Die documentation besagt, dass Sie diese sogar verwenden ", um endgültige Bereinigung für bestimmte Steuerelemente, z. B. das Schließen von Steuerelement-spezifischen Datenbankverbindungen." Meine Empfehlung wäre, das Entladen zu vermeiden. Wenn möglich, mache einen Bereinigungscode eher früher als später, also benutze "using" wenn du kannst. In gewisser Weise ist es wie die Wahl zwischen der Verwendung einer "globalen" Variablen im Gegensatz zu einer lokalen Variablen, letztere ist vorzuziehen.

5

Ich denke, es ist sicher. Page_Unload soll dort sein, wo die Bereinigung im Seitenlebenszyklus durchgeführt wird. Siehe http://msdn.microsoft.com/en-us/library/ms178472.aspx die sagt:

Dieses Ereignis für jedes Steuerelement auftritt und dann für die Seite. Verwenden Sie in den Steuerelementen dieses Ereignis, um die abschließende Bereinigung für spezifische Steuerelemente durchzuführen, z. B. das Schließen von steuerungspezifischen Datenbankverbindungen.

Für die Seite selbst Verwenden Sie dieses Ereignis, um abschließende Bereinigungsarbeiten durchzuführen, z. B. das Schließen geöffneter Dateien und Datenbankverbindungen oder das Beenden der Protokollierung oder anderer anforderungsspezifischer Aufgaben.

Verwandte Themen