ASP.NET动态LoadControl处理

时间:2011-12-12 20:04:48

标签: asp.net

是否需要在通过LoadControl动态加载并添加到页面控制树的控件/对象上调用Dispose?

1 个答案:

答案 0 :(得分:0)

不,一旦响应完成,运行时就可以自由清除与请求相关的所有内容,包括页面对象本身。这也适用于动态加载的控件,因为它们是页面控件集合的一部分。这应该是显而易见的,因为你必须在每次回发时重新创建它们。

如果您的UserControl使用非托管资源(例如数据库连接),则应override dispose。在页面处理之前,控件本身将被隐含地处理。这是页面生命周期结束时的事件顺序:

  • Control: Unload(递归)
  • Control: Dispose(递归)
  • Page: Unload
  • Page: Dispose

作为提示,实现IDisposable的类应该在完成后立即处理(UserControl不会)。但通常你会使用using-statement来完成。

资源:

  

但垃圾收集器是在这里完成工作还是控制器   处理作为页面生命周期一部分的方法?

调用Dispose不会优先对象进行垃圾回收。它只是从内存中卸载对象的(非托管)资源。 调用Dispose不会从内存中释放对象。只有GC在执行对象所在的生成集合时才执行此操作(从上面的first link开始)。

所以我认为你误解了dispose或/和垃圾收集器。