gpt4 book ai didi

memory-leaks - ServiceStack Funq Container WeakReference 泛滥

转载 作者:行者123 更新时间:2023-12-01 03:59:42 24 4
gpt4 key购买 nike

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

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

public SvcName() : base("SvcName", typeof(SvcName).Assembly) { }

我在别处读到 System.WeakReference 对象在极少数情况下经常由 .NET 插入,因为 Visual Studio 编译的二进制文件打开了“编辑并继续”调试选项,但在我的 VS 中关闭它没有效果(大概是因为SS 二进制文件已经被编译并且只是在我的项目中被引用)。

有没有其他人遇到过这个问题?

最佳答案

Funq 中使用 Wea​​kReference 来跟踪 IDisposable存储在 WeakReference Stack of disposables as seen here 中.基本上 Funq 跟踪每个 IDisposable创建 WeakReference 以便在处理 Container 时可以全部处理它们。

我会先看看你是否可以减少使用 IDisposable实例(例如使用更多单例),否则尝试修改 Funq 源代码以使用 Stack<IDisposable>而不是 Stack<WeakReference>并告诉我这是否能解决您的问题,如果可以,我可以在 ServiceStack 中包含一个选择加入选项以使用 Stack<IDisposable>而不是 Stack<WeakReference> .

关于memory-leaks - ServiceStack Funq Container WeakReference 泛滥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14345117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com