gpt4 book ai didi

.net - 什么可以解释托管堆上超过 5,000,000 个 System.WeakReference 实例?

转载 作者:行者123 更新时间:2023-12-04 20:24:52 25 4
gpt4 key购买 nike

我一直在针对生产 ASP.NET Web 应用程序运行负载测试,并且看到在堆上创建了大量 System.WeakReferences。在负载管理下的大约 15 分钟内,堆内存猛增到大约 3GB,并且我有大约 5,000,000 个对 System.WeakReference 的引用。对所有代执行强制垃圾回收不会释放这些引用。

我看过有关 __ENCLIST 帮助程序类的帖子,如果在调试中编译程序集,可以为所有创建的对象创建弱引用,起初我认为这是问题所在,但已验证所有部署的程序集都是在发布中构建的。

我一直在用WinDbg调试进程,这里是!dumpheap -stat的最后几行

000007fef788e0c0 39253 18510000 System.Collections.Hashtable+bucket[]

00000000021bf120 94336 151023192 免费

000007fef7887e98 5959 189838752 System.Char[]

000007fef7874390 517429 589750224 System.Object[]

000007fef78865a0 1531190 1230824112 System.String

000007fef787dab8 51723338 1655146816 System.WeakReference

如您所见,这些 System.WeakReferences 消耗了大约 1.5GB 的内存。

有谁知道是什么导致了所有这些 WeakReferences?

最佳答案

所以事实证明,由于动态创建大量 System.Diagnostics.TraceSwitch 实例,我有 System.WeakReference 泄漏,内部 TraceSource/TraceSwitch 为新的 TraceSource/TraceSwitch 分配一个 WeakReference 并将 WeakReference 放入列表中。尽管 WeakReference 允许对 TraceSource/TraceSwitch 进行垃圾回收,但 WeakReference 本身永远不会被释放,从而导致内存泄漏。

可以在这里找到更多信息

http://msdn.microsoft.com/en-us/library/system.diagnostics.tracesource(VS.80).aspx

关于.net - 什么可以解释托管堆上超过 5,000,000 个 System.WeakReference 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2345490/

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