我一直在使用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查询并检索数据。
此外,我的本机堆栈使用也增加了。 我的应用程序有40个本机堆栈。 最后一个堆栈的内存使用量始终在增加。 它的总使用量从67.57 MB增加到1.59 GB再到3.82 GB。 这可能的原因是什么? 这是否与clr的使用有关?