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

asp.net – 对象不是垃圾回收,但不包含gcroot

发布时间:2020-12-15 23:20:15 所属栏目:asp.Net 来源:网络整理
导读:遇到一个棘手的问题,我们的网络应用程序在这里. ( Asp.net 2.0 Win server 2008) 即使我希望它保持在一个相当静态的水平,我们的网站的内存使用量增长和增长. (我们有少量数据存储在状态). 想知道问题是什么,我已经运行了一个System.GC.Collect();几次,拿一个
遇到一个棘手的问题,我们的网络应用程序在这里. ( Asp.net 2.0 Win server 2008)

即使我希望它保持在一个相当静态的水平,我们的网站的内存使用量增长和增长. (我们有少量数据存储在状态).

想知道问题是什么,我已经运行了一个System.GC.Collect();几次,拿一个内存转储,然后将这个内存转储加载到WinDbg中.

当我做一个DumpHeap -Stat,我得到一个非常大的数字在特定类型挂在内存中.

0000064280580b40 713471 79908752 PaymentOption

所以,做一个DumpHeap -MT这种类型,我得到一堆对象引用.选择一个随机数的这些,我做一个gcroot,命令回来报告,没有引用它.

对我来说,这正是GC应该收集这些物品的原因,但由于某些原因,它们已经被遗弃了.

有人可以就可能发生的情况提供解释吗?

解决方法

您可以尝试在Windbg中使用 sosex.dll,这是一个用于协助.NET调试的扩展.有一个命名为!refs的命令与!gcroot类似,它将显示引用对象的所有对象,加上它将显示它所引用的所有对象.

在作者网站的示例中,!refs被用于对象,输出如下所示:

0:000> !refs 0000000080000db8
由0000000080000db8(System.Threading.Mutex)引用的对象:
0000000080000ef0 32 Microsoft.Win32.SafeHandles.SafeWaitHandle

引用0000000080000db8(System.Threading.Mutex)的对象:
0000000080000e08 72 System.Threading.Mutex c_DisplayClass3
0000000080000e50 64 System.Runtime.CompilerServices.RuntimeHelpers CleanupCode

希望这可以帮助.雅.

(编辑:李大同)

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

    推荐文章
      热点阅读