2008-12-05 90 views
5

做同样的最好practis规则有关订阅/退订事件采用在asp.net?我是否需要在asp.net中取消订阅(手动订阅)事件?

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

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

示例2: 在被动视图模式中,每当需要演示者执行任何操作时,视图(Page control/Usercontrol)都会引发事件。因此,演示者需要订阅视图上的事件,但是是否也需要再次取消订阅事件?

最好的问候,埃吉尔。

回答

4

的页面实例及其所有组件将“走出去的范围”请求完成时,如他们有资格获得GC。因此,您的ListView将随页面/用户控件一起超出范围。你不需要退订(除非您订阅属于某种单身的那个幸存每个请求的事件并使用的页面作为事件处理程序的方法之一,例如)。 (因为这主持人与一个页面单独使用,之后超出范围只要再)

同样的事情是有效的主持人。

+0

好,只是要确定我理解正确:如果我在asp.net缓存单独的对象,当页面外出演示不应认购上的事件,因为单不会被布置的范围,主持人将因此四处流浪? – 2008-12-05 21:39:17

2

一般来说,没有。事件应该在页面卸载时自动转储。应该是。我之前遇到过一个bug(在.NET 1.1中),但事实并非如此。我不会打扰退订,除非我发现页面有问题(例如,一个方法从调用堆栈中的幻影调用20次:这通常表明某些东西没有正确取消订阅)。