在我們的項目中,我們使用MefControllerFactory,這些都是我們在Global.asax中設定的Application_Start爲ControllerBuilder.Current.SetControllerFactory(new Project.Helper.MefControllerFactory(container));
MVC3 IControllerFactory ReleaseController內存泄露
的問題是,當我們運行結果.NET探查的代碼,它給內存泄漏即使我們在「ReleaseController」方法中處理控制器也是一個問題。原始消息是「一個實例被處置,但仍然可以從一個或多個根訪問,因爲通常不再使用已處置的實例,這可能表示內存泄漏。請調查實例以確定實例是否無意中保持活動狀態,或者如果問題可以被忽略。「 有沒有解決這個問題的方法?
第二個信息是: 「直接事件處理器根 甲佈置實例是直接由一個事件處理程序,即,該實例僅作爲一個事件處理程序的目標植根和它不能被從任何到達棄置實例其他的根沒有通過一個委託,因爲不應該使用一個處置的實例,EventHandlers是內存泄漏的常見原因,這個問題是內存泄漏的一個強有力的指示。「
public class MefControllerFactory : IControllerFactory
{
private CompositionContainer _container;
private DefaultControllerFactory defaultControllerFactory;
public MefControllerFactory(CompositionContainer container)
{
_container = container;
this.defaultControllerFactory = new DefaultControllerFactory();
}
#region IControllerFactory Members
public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
IController controller = null;
controller = _container.GetExportedValueOrDefault<IController>(controllerName);
if (controller == null)
return this.defaultControllerFactory.CreateController(requestContext, controllerName);
return controller;
}
public void ReleaseController(IController controller)
{
IDisposable disposable = controller as IDisposable;
if (disposable != null)
disposable.Dispose();
}
#endregion
public System.Web.SessionState.SessionStateBehavior GetControllerSessionBehavior(System.Web.Routing.RequestContext requestContext, string controllerName)
{
return System.Web.SessionState.SessionStateBehavior.Default;
}
}
謝謝...
感謝您回答它的作品... – anilca 2012-03-15 15:18:28