c# - 可以相信 Page_Unload 将始终运行并且是放置 Dispose() 代码的好地方吗?

标签 c# .net asp.net dispose

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

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

最佳答案

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

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

关于c# - 可以相信 Page_Unload 将始终运行并且是放置 Dispose() 代码的好地方吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/703836/

相关文章:

javascript - c# - 使用 Jquery 进行 AJAX 调用时出现问题

c# - 为架构 'onvif' 生成类时出错

.net - 与DataReader一起使用时,输出参数不可读

c# - 从 C++ 调用 C# dll 时如何使用 app.config 文件

c# - 在 SSMS 中运行良好的 SQL 查询在 ASP.NET 中运行非常慢

尽管使用 Microsoft.Net.Compilers nuget 包,VS2013 上的 C#6 错误消息

.net - 社交多人浏览器游戏的架构(后端选择 + 前端选择 [flash/silverlight])

c# - 为函数制作时间测量包装类的最佳方法是什么?

asp.net - 如何在代码隐藏中将 textchanged 事件添加到文本框

c# - WCF:消息中没有名称为 '' 且命名空间为 '' 的 header