是否需要在通过LoadControl动态加载并添加到页面控制树的控件/对象上调用Dispose?
答案 0 :(得分:0)
不,一旦响应完成,运行时就可以自由清除与请求相关的所有内容,包括页面对象本身。这也适用于动态加载的控件,因为它们是页面控件集合的一部分。这应该是显而易见的,因为你必须在每次回发时重新创建它们。
如果您的UserControl使用非托管资源(例如数据库连接),则应override dispose。在页面处理之前,控件本身将被隐含地处理。这是页面生命周期结束时的事件顺序:
Control: Unload
(递归)Control: Dispose
(递归)Page: Unload
Page: Dispose
作为提示,实现IDisposable的类应该在完成后立即处理(UserControl不会)。但通常你会使用using-statement来完成。
资源:
但垃圾收集器是在这里完成工作还是控制器 处理作为页面生命周期一部分的方法?
调用Dispose
不会优先对象进行垃圾回收。它只是从内存中卸载对象的(非托管)资源。
调用Dispose不会从内存中释放对象。只有GC在执行对象所在的生成集合时才执行此操作(从上面的first link开始)。
所以我认为你误解了dispose或/和垃圾收集器。