我在我的WCF应用服务器中使用Castle Windsor DI容器。在这种情况下,生命周期是每个请求:创建一个新的服务实例,创建和安装容器,解决一些组件,完成工作并处理所有组件。
然而,在一些请求之后,我的应用服务器的内存消耗增加了。我能够发现当我评论DI使用时内存问题消失了。但是当我安装容器并解决某些组件时,会出现一些内存泄漏问题。 我找到了一些关于生命周期的文章和帖子。但是所有这些都绑定到容器实例。由于我的容器仅在请求期间存在,因此在处理它时必须将所有东西都销毁。
我的服务实现了IDisposable,在Dispose方法中我调用了container.Dispose。但是,内存使用量不断增加。
使用dotMemory profiler我可以看到有幸存者和ProxyGenerationOptions的新实例以及其他一些类。
我错过了什么吗?为什么在调用Dispose后容器没有释放所有已用内存?
答案 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, ......
}
}