在剖析应用程序的内存使用情况时,我已经遇到了以下图表:如您所见,在“快照1”行之前,非托管内存大约占已使用内存的一半.然后,在“快照1”和2分55秒(请参阅下面的时间线)之后,我强制执行垃圾收集.如我所料,第2代主...
在剖析应用程序的内存使用情况时,我已经遇到了以下图表:
如您所见,在“快照1”行之前,非托管内存大约占已使用内存的一半.然后,在“快照1”和2分55秒(请参阅下面的时间线)之后,我强制执行垃圾收集.
如我所料,第2代主要是收集的,但是未托管的内存没有释放,现在它可以容纳大约2个.总已用内存的2/3.
我不知道在这种情况下“非托管内存”是什么意思.
这是带有某些WinForms / GDI互操作的WPF应用程序.我敢肯定,所有应该处置的东西都已处置.此外,也没有明确的平台互操作代码.其余的托管内存都可以.
这是内存泄漏指示吗?
如果是这样,在这里检测内存泄漏的方法是什么?
这很重要,我使用的探查器是JetBrains dotMemory.
解决方法:
dotMemory图表上的“已使用总量”是进程的私有工作集.进程可执行文件要求的内存是内存-不一定是实际使用的数量.它包括所有DLL和堆,但不包括内存映射文件(共享DLL).而且,没有办法知道它是属于可执行文件本身,还是属于链接库.这不仅是物理内存;它们可以分页到磁盘或备用页列表中(即不再使用,但也没有分页).
因此,除了托管CLR堆以外,非托管内存是私有工作集中的所有内容.通常,您没有简单的方法来更改纯.net进程的非托管内存量.并且在程序执行过程中大约是常数.
本文标题为:c#-探查器图上的“非托管内存”.这是内存泄漏指示吗?
基础教程推荐
- C#中使用CliWrap让命令行交互举重若轻 2023-05-12
- Unity实现游戏存档框架 2023-02-07
- Unity使用LineRender断笔写字 2023-01-27
- c#-捕获不相关进程的输出 2023-11-26
- C#通过PInvoke调用c++函数的备忘录的实例详解 2023-01-28
- Oracle中for循环的使用方法 2023-07-04
- C#判断字符串中内容是否为纯数字的详细教程 2023-07-18
- C# 实例解释面向对象编程中的单一功能原则(示例代码) 2023-05-17
- C#实现炫酷启动图-动态进度条效果 2023-01-22
- WPF模拟实现Gitee泡泡菜单的示例代码 2023-06-27