gpt4 book ai didi

c# - 探查器图表中的 "Unmanaged memory"。这是内存泄漏指示吗?

转载 作者:太空狗 更新时间:2023-10-30 01:02:57 70 4
gpt4 key购买 nike

在分析我的应用程序的内存使用情况时,我遇到过这个图表:

enter image description here

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

正如我所料,第 2 代大部分已被收集,但未释放非托管内存,现在它拥有大约。已用内存总量的 2/3。

我不知道“非托管内存”在这种情况下是什么意思。这是具有某些 WinForms/GDI+ 互操作性的 WPF 应用程序。我敢肯定,应该处置的一切都已处置。此外,没有明确的平台互操作代码。其余的托管内存没问题。

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

最佳答案

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

关于c# - 探查器图表中的 "Unmanaged memory"。这是内存泄漏指示吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31510498/

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