我是否需要在asp.net中取消订阅(手动订阅)活动?

时间:2008-12-05 21:03:52

标签: asp.net events garbage-collection page-lifecycle

关于订阅/取消订阅活动的相同最佳实践规则是否适用于asp.net?

我知道这可能看起来像一个愚蠢的问题,但是当我想到它时,我从未真正看到任何代码,人们首先在页面上订阅某个事件,然后在Web请求中取消订阅。

示例1: 在页面上,在Page_Load方法中,我订阅了ListView上的更新事件。我以后是否应该取消订阅该事件,例如在OnPreRenderComplete方法中?

示例2: 在被动视图模式中,视图(页面控件/用户控件)将在需要演示者执行任何操作时引发事件。因此,演示者需要订阅视图中的事件,但是还需要再次取消订阅事件吗?

最好的问候,埃吉尔。

2 个答案:

答案 0 :(得分:4)

当请求完成时,页面实例及其所有组件将“超出范围”,例如他们有资格获得GC。因此,ListView将与其上的页面/用户控件一起超出范围。您不需要取消订阅(除非您订阅属于某种单例的事件,该事件在每个请求中幸存并且使用该页面的某个方法作为事件处理程序)。

同样的事情对于演示者也是有效的(只要这个演示者仅用于一页并且在此之后超出范围)。

答案 1 :(得分:2)

一般来说,没有。当页面卸载时,应该自动转储事件。应该是。我之前遇到过一个错误(在.NET 1.1中),但事实并非如此。

我不打算取消订阅,除非我注意到页面有问题(例如,一个方法被调用堆栈中的一个虚拟图形调用20次:这通常是未正确取消订阅的标志)。