订阅MVC控制器中的事件
问题描述:
订阅控制器中的事件时,是否需要取消订阅?不会取消导致内存泄漏?为什么/为什么不?订阅MVC控制器中的事件
[HttpPost]
public JsonResult Process(string data)
{
DataProcessor.Notify += (sender, args) =>
{
result = JsonConvert.SerializeObject(args);
};
.. // do other work
return Json(result);
}
答
首先,最好的,最安全的做法IMO是总是退订。
在这个特定的情况下,你应该肯定退订,因为你的控制器的寿命会比你的(我猜)静态DataProcessor
类短。每当一个短暂的物体订阅一个长寿命的物体时,它很可能会导致内存泄漏,因为长寿命物体的事件代表列表将持有对您的短活物体的引用。
我建议你在控制器的Dispose
方法中取消订阅。
如果DataProcessor
不是静态类,而是控制器中的字段,则必须检查该对象的范围。如果它是该控制器实例的专用实例,则可以省略取消订阅,因为这两个对象很可能会一起GCd。
可能重复的[我应该退订事件?](http://stackoverflow.com/questions/4172809/should-i-unsubscribe-from-events) – Aravind