c#-探查器图上的“非托管内存”.这是内存泄漏指示吗?

在剖析应用程序的内存使用情况时,我已经遇到了以下图表:如您所见,在“快照1”行之前,非托管内存大约占已使用内存的一半.然后,在“快照1”和2分55秒(请参阅下面的时间线)之后,我强制执行垃圾收集.如我所料,第2代主...

在剖析应用程序的内存使用情况时,我已经遇到了以下图表:

如您所见,在“快照1”行之前,非托管内存大约占已使用内存的一半.然后,在“快照1”和2分55秒(请参阅下面的时间线)之后,我强制执行垃圾收集.

如我所料,第2代主要是收集的,但是未托管的内存没有释放,现在它可以容纳大约2个.总已用内存的2/3.

我不知道在这种情况下“非托管内存”是什么意思.
这是带有某些WinForms / GDI互操作的WPF应用程序.我敢肯定,所有应该处置的东西都已处置.此外,也没有明确的平台互操作代码.其余的托管内存都可以.

这是内存泄漏指示吗?
如果是这样,在这里检测内存泄漏的方法是什么?
这很重要,我使用的探查器是JetBrains dotMemory.

解决方法:

dotMemory图表上的“已使用总量”是进程的私有工作集.进程可执行文件要求的内存是内存-不一定是实际使用的数量.它包括所有DLL和堆,但不包括内存映射文件(共享DLL).而且,没有办法知道它是属于可执行文件本身,还是属于链接库.这不仅是物理内存;它们可以分页到磁盘或备用页列表中(即不再使用,但也没有分页).
因此,除了托管CLR堆以外,非托管内存是私有工作集中的所有内容.通常,您没有简单的方法来更改纯.net进程的非托管内存量.并且在程序执行过程中大约是常数.

本文标题为:c#-探查器图上的“非托管内存”.这是内存泄漏指示吗?

基础教程推荐