asp.net - 对象未被垃圾回收,但不包含 gcroot

标签 asp.net debugging windbg

我们的网络应用程序遇到了棘手的问题。 (Asp.net 2.0 Win服务器2008)

我们网站的内存使用量不断增长,尽管我希望它保持在相当静态的水平。 (我们有少量数据存储在状态中)。

为了找出问题所在,我运行了 System.GC.Collect();几次,获取内存转储,然后将此内存转储加载到 WinDbg 中。

当我执行 DumpHeap -Stat 时,我在内存中得到了一个异常大的特定类型的数字。

0000064280580b40 713471 79908752 付款选项

因此,为这种类型执行 DumpHeap -MT,我得到了一堆对象引用。我选择其中的随机数,执行 !gcroot,命令返返回告没有引用它。

对我来说,这正是 GC 应该收集这些项目的时间,但由于某种原因,它们一直处于未完成状态。

任何人都可以解释可能发生的情况吗?

最佳答案

您可以尝试使用 sosex.dll Windbg 是一个为帮助 .NET 调试而编写的扩展。有一个名为 !refs 的命令,它与 !gcroot 类似,它会显示引用某个对象的所有对象,此外还会显示它引用的所有对象。

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

0:000> !refs 0000000080000db8
Objects referenced by 0000000080000db8 (System.Threading.Mutex):
0000000080000ef0         32    Microsoft.Win32.SafeHandles.SafeWaitHandle 

Objects referencing 0000000080000db8 (System.Threading.Mutex):
0000000080000e08         72    System.Threading.Mutex+<>c__DisplayClass3
0000000080000e50         64    System.Runtime.CompilerServices.RuntimeHelpers+CleanupCode

关于asp.net - 对象未被垃圾回收,但不包含 gcroot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/603587/

相关文章:

asp.net - Dim WithEvents 主题

asp.net - SQL网络接口(interface),错误: 50 - Local Database Runtime error occurred.指定的LocalDB实例不存在

asp.net - 检查IIS 7.5中的IIS虚拟路径

.net - 是否有可能从转储中获取引发异常的行?

c - malloc() 每次都会崩溃 || Windbg 与 nt!DbgLoadImageSymbols 发生冲突

windbg - pykd 中的 searchMemory 函数

asp.net - 不要在 ASP.NET 中发布特定文件夹

java - 调试java插件

c++ - 如何反汇编编译器生成的代码?

按钮上的php条件