加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

.net – 什么可以解释托管堆上超过5,000,000个System.WeakRefere

发布时间:2020-12-15 19:56:32 所属栏目:asp.Net 来源:网络整理
导读:我一直在对生产ASP.NET Web应用程序运行负载测试,并且看到在堆上创建了大量的System.WeakReferences.在负载下大约15分钟内,托管堆内存大约增加到3GB,我有大约5,000,000个对System.WeakReference的引用.执行所有代的强制垃圾收集不会释放这些引用. 我已经看过
我一直在对生产ASP.NET Web应用程序运行负载测试,并且看到在堆上创建了大量的System.WeakReferences.在负载下大约15分钟内,托管堆内存大约增加到3GB,我有大约5,000,000个对System.WeakReference的引用.执行所有代的强制垃圾收集不会释放这些引用.

我已经看过关于__ENCLIST辅助类的帖子,如果在调试中编译程序集,可以为所有创建的对象创建WeakReferences,起初我认为这是问题,但已经验证所有已部署的程序集都是在发行版中构建的.

我一直在使用WinDbg来调试这个过程,这里是最后几行!dumpheap -stat

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

00000000021bf120    94336    151023192      Free

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将WeakReference分配给新的TraceSource / TraceSwitch并将WeakReference放入列表中.尽管WeakReference允许对TraceSource / TraceSwitch进行垃圾回收,但WeakReference本身永远不会被释放,从而导致内存泄漏.

在这里可以找到更多信息

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读