【发布时间】:2020-06-08 12:39:02
【问题描述】:
Visual Studio 诊断工具是否测量应用程序线程使用的总内存,或当前使用的当前内存?
我有一个应用程序以每秒 3 帧的速度从 34 兆像素的相机中读取数据。计算得出它每秒处理 288 MB,或每分钟大约 17 GB。考虑到这一点,一旦开始收集相机帧,应用程序显然会消耗大量数据。我的眼睛一直盯着诊断工具看,原因如下:
我让应用程序使用性能分析器运行了大约 3 分钟,它最终报告了大约 31 GB 的总进程内存,如下所示:
我的笔记本电脑只有 16 GB 的 RAM,所以乍一看,我认为上面的图片基本上回答了我的问题。然而,刚刚超过 2:30 分钟,您可以看到内存急剧下降,这是没有意义的(我不相信程序运行方式有任何变化)。此外,当我打开任务管理器时,我可以看到我的应用程序正在使用大约 9 GB 的内存,然后在 2:30 分钟左右下降到大约 3 GB 的内存。
考虑到所有这些,进程内存真正衡量的是什么?
因为解决方案被埋没在接受的答案中的 cmets 中,所以我将在这里总结解决方案,以解决我的程序为什么使用这么多内存的整体问题。这与我没有处理位图的错误有关。位图是非托管内存;如果您未能在它们超出范围之前处理它们,它们将继续存在于内存中(在您的垃圾收集器之外),直到达到非托管对象数量的阈值。只有达到该阈值时,非托管对象才会被删除。这就是我的程序中发生的情况,当它从大约 31 GB 的内存下降到大约 5 GB 的内存时。
【问题讨论】:
标签: c# memory-management memory-leaks garbage-collection visual-studio-2019