我的一个应用程序中发生内存泄漏。在dotMemort中对应用程序进行性能分析后,看起来它是由温莎城堡造成的。
这是dotMemory的屏幕截图: 从图像中可以看到,有很多嵌套的引用。
WindsorContainer
- kernel DefaultKernel
- subsystems : Dictionary
- entities : Dictionary
- CustomNamingSystem
- kernel DefaultKernel
- subsystems : Dictionary
- entities : Dictionary
- CustomNamingSystem
- kernel DefaultKernel
- subsystems : Dictionary
- entities : Dictionary
- CustomNamingSystem
...
以前没有注册控制器,所以我尝试注册它是
container.Register(Component.For<ProductController>().ImplementedBy<ProductController>().LifeStyle.Transient);
但是看起来没有帮助。
还有一些可疑的代码:
public sealed class WindsorResolver : IDependencyResolver
{
private readonly IWindsorContainer _container;
public WindsorResolver(IWindsorContainer container)
{
if (container == null)
{
throw new ArgumentNullException("container");
}
_container = container;
}
public object GetService(Type serviceType)
{
try
{
return _container.Resolve(serviceType);
}
catch (ComponentNotFoundException)
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return _container.ResolveAll(serviceType).OfType<object>();
}
catch (ComponentNotFoundException)
{
return new List<object>();
}
}
public IDependencyScope BeginScope()
{
var child = new WindsorContainer { Parent = _container };
return new WindsorResolver(child);
}
public void Dispose()
{
_container.Dispose();
}
}
}
每次我从控制器调用方法时,方法GetService都用参数“ ProductController”调用,可以吗?
您有什么想法,哪里有问题?