Castle Windsor DI容器内存泄漏

时间:2015-11-05 22:49:03

标签: memory-leaks dependency-injection castle-windsor

我在我的WCF应用服务器中使用Castle Windsor DI容器。在这种情况下,生命周期是每个请求:创建一个新的服务实例,创建和安装容器,解决一些组件,完成工作并处理所有组件。

然而,在一些请求之后,我的应用服务器的内存消耗增加了。我能够发现当我评论DI使用时内存问题消失了。但是当我安装容器并解决某些组件时,会出现一些内存泄漏问题。 我找到了一些关于生命周期的文章和帖子。但是所有这些都绑定到容器实例。由于我的容器仅在请求期间存在,因此在处理它时必须将所有东西都销毁。

我的服务实现了IDisposable,在Dispose方法中我调用了container.Dispose。但是,内存使用量不断增加。

使用dotMemory profiler我可以看到有幸存者和ProxyGenerationOptions的新实例以及其他一些类。

dotMemory snapshots comparison

我错过了什么吗?为什么在调用Dispose后容器没有释放所有已用内存?

1 个答案:

答案 0 :(得分:0)

我有类似的问题 我解决了它,当我创建代理类时,我服务于ModuleScope对象

public static class ProxyFactory
{
    private static ModuleScope _moduleScope = new ModuleScope(false, false);

    public static TClass CreateProxy<TClass>(TClass instance) 
    {

                ProxyGenerator proxy = new ProxyGenerator(new DefaultProxyBuilder(_moduleScope));


                List<Type> interfaces = new List<Type>();       
                interfaces.AddRange(instance.GetType().GetInterfaces());

TClass result = proxy.CreateClassProxyWithTarget(
                instance.GetType(),
                interfaces.ToArray(),
                instance, ......

   }

}