我正在订阅page_load事件中其中一个页面的主页中的事件,即我有代码
this.Master.Event1 += new Event1EventHandler(Master_Event1);
在page_load事件中。
如果我不取消订阅此事件会导致内存泄漏吗?什么是取消订阅的适当方式?我应该在page_unload事件中这样做吗?这将处理退出页面的用户操作,但如果用户关闭浏览器,那么处理它的正确方法是什么? global.asax中的Session_end?
由于
答案 0 :(得分:1)
事件处理程序列表本质上是弱引用,因此不会导致内存泄漏。您没有明确删除所有Click
以及任何处理程序,是吗?
此外,Unload
事件与关闭浏览器窗口的用户无关。对我来说,这听起来像是你误解了网络和/或ASP.NET的一些基础知识。
答案 1 :(得分:0)
与Windows Forms或WPF不同,ASP.NET是无状态的(与其他所有Web服务器解决方案一样)。简而言之,这意味着当GET请求进入时,Web服务器(IIS)处理请求并根据您构建的aspx页面生成一个html页面(使用或不使用母版页)。
因此,当您将事件处理程序挂钩到从主页面触发的事件时,您只能在同一请求,内容页面或可能加载到该内容页面的任何用户控件中处理它。
为什么要在主页面中触发任何事件?如果您告诉我们更多关于您正在寻找的功能,我们可能会提供替代方案 - 甚至可能更好 - 解决方案。
在以下MSDN页面上阅读有关ASP.NET的更多信息,或者只是谷歌自己知道:)