我看到這段代碼是別人寫的:是否需要註銷事件處理程序?
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抱歉,單方面和快速提示:我們能否就我們對內存泄露實際上的定義達成一致?維基有一個非常通用的定義,因爲*錯誤地管理內存分配*,我同意 –