在分析应用程序的内存使用情况时,我已经面对这个图表了:
正如你所看到的,在线"快照1"非托管内存占用总内存的大约一半。然后,"快照1"我在2分55秒(见下面的时间表)中强行收集垃圾。
正如我所料,第2代主要是收集的,但是未管理的内存没有被释放,现在它已经存在了。总使用内存的2/3。
我不知道,什么"非管理内存"意味着在这种情况下。 这是带有一些WinForms / GDI +互操作的WPF应用程序。我确信,应该处理的所有事情都要处理掉。此外,还没有明确的平台互操作代码。其余的托管内存都可以。
这是内存泄漏指示吗? 如果是这样,这里检测内存泄漏的方法是什么? 这是重要的,我使用的探查器是JetBrains dotMemory。
答案 0 :(得分:4)
dotMemory图表上的“已使用总量”内存是私有工作进程集。它是进程可执行文件所要求的内存 - 不一定是它实际使用的数量。它包括所有DLL和堆,但不包括内存映射文件(共享DLL)。此外,无法判断它是属于可执行文件本身,还是属于链接库。它不仅仅是物理内存;它们可以被分页到磁盘或备用页面列表(即不再使用,但也没有被分页)。 因此,非托管内存是私有工作集中的所有内容,除了托管CLR堆。通常,您没有简单的方法来更改纯.net进程的非托管内存量。并且在程序执行期间它几乎保持不变。