В нашем проекте мы используем MefControllerFactory, это коды, которые мы устанавливаем в application_start в global.asax как ControllerBuilder.Current.SetControllerFactory(new Project.Helper.MefControllerFactory(container));
Проблема в том, что когда мы запускаем .NET Profiler, в результате возникает проблема утечки памяти, даже если мы располагаем контроллеры в методе «ReleaseController». Исходное сообщение: "Экземпляр удален, но все еще доступен из одного или нескольких корней. Поскольку удаленный экземпляр, как правило, больше не должен использоваться, это может указывать на утечку памяти. Исследуйте экземпляр, чтобы выяснить, является ли экземпляр непреднамеренным или если проблема может быть проигнорирована. "
Есть ли решение этой проблемы?
Второе сообщение:
"Распоряженный экземпляр с прямыми корнями EventHandler
Удаляемый экземпляр напрямую коренится в EventHandler, то есть экземпляр используется только как цель EventHandler, и к нему нельзя получить доступ из любого другого корня без прохождения через делегат. Поскольку удаленный экземпляр больше не должен использоваться, а 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;
}
}
Спасибо ...