6

我熟悉 try{}finally{} 模式、using(){} 模式作为确保调用 Dispose() 的方法,但对于 ASP.NET 页面,Dispose 中创建的对象是否同样安全Page_Unload 事件的页面范围?改写 Page 的 Dispose() 方法是否有意义?

我不确定是什么代码引发了 Page_Unload 事件或 Page Dispose() 方法,所以我不知道它会运行的保证是什么。

4

2 回答 2

9

unload 事件在处置之前的控件生命周期中引发。由于页面本身是一个控件,因此也会为它引发 unload 事件。您添加到页面的每个控件都将成为页面生命周期的一部分。因此,如果您有一个需要进行一些清理的控件,则该控件本身应该自己处理任何可能的清理。只要控件已添加到页面并正确遵循封装原则,您就不必担心这一点。

文档说您甚至应该使用它“对特定控件进行最终清理,例如关闭特定于控件的数据库连接”。我的建议是避免卸载事件。如果可能的话,尽早而不是稍后做任何清理代码,所以如果可以的话,请使用“使用”。在某种程度上,这就像使用“全局”变量而不是局部变量之间的选择,后者更可取。

于 2009-04-01T03:01:32.860 回答
5

我认为这是安全的。Page_Unload 应该是在页面生命周期中执行清理的地方。请参阅http://msdn.microsoft.com/en-us/library/ms178472.aspx,其中说:

此事件发生在每个控件,然后是页面。在控件中,使用此事件对特定控件进行最终清理,例如关闭特定于控件的数据库连接。

对于页面本身,使用此事件来完成最后的清理工作,例如关闭打开的文件和数据库连接,或者完成日志记录或其他特定于请求的任务。

于 2009-04-01T02:57:11.887 回答