我看到这段代码是别人写的:是否需要注销事件处理程序?
public class DynamicPageContent : IHttpModule
{
public void Dispose() { }
public void Init(HttpApplication context)
{
// it is necessary to
context.BeginRequest += new EventHandler(DynamicPageContent_BeginRequest);
}
//actual handler not pasting as it's meaningless for this question
}
正如你所看到的处理程序注册,但从来没有注销。这不会造成内存泄漏?
简单 - 是的。考虑[这个答案](http://stackoverflow.com/a/621177/1283124),假设'DynamicPageContent_BeginRequest'是一个实例方法。并非所有人都同意,他实际上是一个内存泄漏(这在某种程度上与C++泄漏不同),但作为一般规则,您应该取消订阅,以便GC可以收集对象。 –
@IlyaIvanov:in * theory * should not,imo。由于模块在App启动时创建一次(就我所知),并且在请求管理期间始终提供* same *实例。所以这*不应该*产生任何内存泄漏,imo。 – Tigran
@Tigran抱歉,单方面和快速提示:我们能否就我们对内存泄露实际上的定义达成一致?维基有一个非常通用的定义,因为*错误地管理内存分配*,我同意 –