首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServiceStack Funq容器WeakReference增殖

ServiceStack Funq容器WeakReference增殖
EN

Stack Overflow用户
提问于 2013-01-16 03:12:17
回答 1查看 594关注 0票数 4

我最近写了一个小服务,它处理大量的吞吐量(大约每天百万次60+请求),但它遇到了内存问题。一开始,我查看了所有常见的疑点,确信它必须是我编写的东西,而不是与非常有用的、非常面向性能的ServiceStack库有关的东西。但是,在使用windbg在生产服务器上使用!dumpheap时,我惊讶地发现内存中的绝大多数对象都是System.WeakReference类型,其中!gcroot指向ServiceStack的Funq容器。

我甚至没有在我的服务中使用IoC的数据结构,所以我想知道为什么会发生这种情况?我是不是初始化错误了?我的apphost初始化类只是使用程序集和名称信息调用基构造器,我根本不覆盖Configure方法。

代码语言:javascript
复制
public SvcName() : base("SvcName", typeof(SvcName).Assembly) { }

我在其他地方读到,由于Visual Studio编译二进制文件时打开了“编辑并继续”调试选项,所以.NET在极少数情况下会插入System.WeakReference对象,但在我的VS中关闭它没有任何效果(可能是因为SS二进制文件已经编译,并且只是在我的项目中引用)。

其他人有过这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-16 08:06:21

在Funq中使用WeakReference来跟踪存储在WeakReference Stack of disposables as seen here中的容器。基本上,Funq会跟踪创建的每个IDisposable WeakReference,所以当容器被处理时,它们都可以被处理掉。

我会首先考虑是否可以减少IDisposable实例的使用(例如,使用更多的单例),或者尝试修改Funq源代码以使用Stack<IDisposable>而不是Stack<WeakReference>,并让我知道这是否解决了您的问题,如果解决了,我可以在ServiceStack中包含一个选择加入选项,以使用Stack<IDisposable>而不是Stack<WeakReference>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14345117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档