订阅MVC控制器中的事件

问题描述:

订阅控制器中的事件时,是否需要取消订阅?不会取消导致内存泄漏?为什么/为什么不?订阅MVC控制器中的事件

[HttpPost] 
    public JsonResult Process(string data) 
    { 
     DataProcessor.Notify += (sender, args) => 
     { 
      result = JsonConvert.SerializeObject(args); 
     }; 

     .. // do other work 

     return Json(result); 
    } 
+0

可能重复的[我应该退订事件?](http://*.com/questions/4172809/should-i-unsubscribe-from-events) – Aravind

首先,最好的,最安全的做法IMO是总是退订。

在这个特定的情况下,你应该肯定退订,因为你的控制器的寿命会比你的(我猜)静态DataProcessor类短。每当一个短暂的物体订阅一个长寿命的物体时,它很可能会导致内存泄漏,因为长寿命物体的事件代表列表将持有对您的短活物体的引用。

我建议你在控制器的Dispose方法中取消订阅。

如果DataProcessor不是静态类,而是控制器中的字段,则必须检查该对象的范围。如果它是该控制器实例的专用实例,则可以省略取消订阅,因为这两个对象很可能会一起GCd。