gpt4 book ai didi

.NET - clr.dll 和 native 堆的高内存使用率

转载 作者:行者123 更新时间:2023-12-01 14:44:22 29 4
gpt4 key购买 nike

我一直在使用 DebugDiag 对显示内存持续增加的 .NET 应用程序执行内存泄漏分析。

经过几次测试转储,然后在一天内捕获转储,我看到模块 clr.dll 在第一个转储中分配了 5.08 MB,在第二个转储中分配了 286.4 MB,在第二个转储中分配了 609.56 MB第三。

具体来说,分配量的增加是由 clr!DoNDirectCall__PatchGetThreadCall+7b 引起的,它在第一位分配了 894.33 KB,在第二位分配了 280.85 MB,在第三位分配了 601.13 MB。这是第三次转储中的一些调用堆栈 -

Call stack sample 1

Address 0x00730074`00210048
Allocation Time 00:09:03 since tracking started
Allocation Size 34 Bytes


Function Source Destination
clr!DoNDirectCall__PatchGetThreadCall+7b
mscorlib_ni+b9597b
mscorlib_ni+b940ed
mscorlib_ni+b9513e
System_Management_ni+dc561
System_Management_ni+aa364
System_Management_ni+e4616

Call stack sample 2

Address 0x00730074`00210048
Allocation Time 00:05:00 since tracking started
Allocation Size 34 Bytes


Function Source Destination
clr!DoNDirectCall__PatchGetThreadCall+7b
mscorlib_ni+9bb2cc
mscorlib_ni+b934aa
System_Management_ni+dc714
System_Management_ni+acb99
System_Management_ni+e41a5


Call stack sample 3

Address 0x00730074`00210048
Allocation Time 00:05:00 since tracking started
Allocation Size 34 Bytes


Function Source Destination
clr!DoNDirectCall__PatchGetThreadCall+7b
mscorlib_ni+9bb2cc
mscorlib_ni+b934aa
System_Management_ni+dc714
System_Management_ni+acb99
System_Management_ni+e41a5
0x6448017AE50

这可能是什么原因造成的,我该如何找到更多相关信息?

此外,我的代码使用可用的 C# 方法来运行远程 WMI 查询并检索该数据。

此外,我的 Native Heaps 使用量也增加了。我的应用程序有 40 个 native 堆。最后一个堆的内存使用总是增加的。它的总使用量从 67.57 MB 到 1.59 GB 再到 3.82 GB。这可能是什么原因造成的,这与 clr 的用法有关吗?

最佳答案

使用

!dumpheap -stat

在每个阶段。您可能会发现在每个阶段哪种类型都在急剧增加。在那些对象上使用

!gcroot <"addr">

从垃圾收集中找出哪个对象持有它。

关于.NET - clr.dll 和 native 堆的高内存使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18756023/

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