温莎内存泄漏嵌套对象

时间:2019-05-21 14:01:52

标签: c# .net memory-leaks castle-windsor

我的一个应用程序中发生内存泄漏。在dotMemort中对应用程序进行性能分析后,看起来它是由温莎城堡造成的。

这是dotMemory的屏幕截图: dotMemory 1 dotMemory 2 dotMemory 3 从图像中可以看到,有很多嵌套的引用。

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”调用,可以吗?

您有什么想法,哪里有问题?

0 个答案:

没有答案