我需要取消订阅(手动订阅)asp.net中的事件吗?

更新时间:2024-01-14 下载TXT文档 下载Word文档

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

我知道这似乎是一个愚蠢的问题,但是当我考虑它时,我从未真正看到过任何代码,人们首先在页面上订阅一个事件,然后再在Web请求中取消订阅。

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

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

最好的问候,埃吉尔。 短码网=DuanMa.NET

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

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

  • 好的,只是为了确保我理解正确:如果我在asp.net缓存中有一个单例对象,则演示者不应该订阅该事件,因为当页面超出范围时,单例将不会被处理,主持人会因此闲逛吗?
  • 是的,我已经更新了答案中的措词。基本上,您不应将所有引用(或其中的任何控件)与长期存在的对象一起使用。事件处理程序可以是这样的引用。
  • 只是一个例子:如果您订阅了一个长寿对象的事件,并使用页面的一种方法作为处理程序,那么长寿对象将拥有对该页面的引用。对于GC,该页面仍然可见/在范围内。静态方法作为事件处理程序虽然可以。
  • 当然,只要您在完成活动后取消连线,就可以订阅任何事件,即使是在长寿命的物体上。只是在这里很清楚:-)
  • 我遇到了单例事件处理程序,从而阻止Winforms中的GC问题,并通过对话框导致了很好的内存泄漏。一种简单的解决方案是确保在尝试关闭/放置对话框时删除处理程序,一切都很好。

通常,不会。页面卸载时,应该自动转储事件。应该是。在(.NET 1.1中)我遇到了一个错误,以前不是这样。

除非您注意到页面有问题,否则我不会打扰退订(例如,从调用堆栈中的幻像调用方法20次:通常表明某些事情未正确退订)。

以上就是短码网小编为大家整理的《我需要取消订阅(手动订阅)asp.net中的事件吗?》相关内容,希望大家喜欢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若内容造成侵权/违法违规/事实不符,请将联系本站反馈,一经查实,立即处理!

我需要取消订阅(手动订阅)asp.net中的事件吗?》文档下载仅供参考学习,下载后请在24小时内删除。

转载注明出处:https://www.duanma.net/article/9f894282408.html

回到顶部