是否可以安全地相信Page_Unload将始终运行并且是Dispose()代码的好地方?

时间:2009-04-01 02:23:10

标签: c# .net asp.net dispose

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

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

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:5)

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

  

每个控件都会发生此事件   然后为页面。在控件中,使用   这个事件要做最后的清理工作   特定控件,例如关闭   特定于控件的数据库连接。

     

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