5

关于订阅/取消订阅事件的最佳实践规则是否适用于 asp.net?

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

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

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

最好的问候,埃吉尔。

4

2 回答 2

4

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

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

于 2008-12-05T21:22:17.590 回答
2

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

除非我注意到页面有问题,否则我不会取消订阅(例如,从调用堆栈中的幻象调用了 20 次方法:这通常表明某些内容未正确取消订阅)。

于 2008-12-05T21:07:48.400 回答