使用Visual Studio诊断工具调查内存消耗/泄漏

时间:2019-01-21 19:16:26

标签: c# visual-studio memory-leaks visual-studio-2017

在我正在使用的WPF应用程序中,我从Visual Studio诊断工具获得了以下内存使用配置文件(请参见下图)。

因此,我的程序会不断分配越来越多的内存,直到获得OutOfMemoryException

我是VS Diagnostic Tools的新手,所以问题是:如何使用此窗口或它提供的信息来找出造成这种内存消耗的罪魁祸首?

enter image description here

2 个答案:

答案 0 :(得分:2)

当内存达到可疑的高度时,您将需要暂停调试器,然后使用“ Take Snapshot”获取内存分配的快照。然后,您可以分析哪些对象正在使用不同的内存量。

有关使用诊断工具测量内存使用情况的更多详细信息,请参见this link

答案 1 :(得分:1)

这也很大程度上取决于您在做什么,即您是否有一个巨大的文件?还是您有成千上万甚至数百万个较小的对象,文件或图像?

我最近遇到的一种情况是内存使用率很高,原因是system.graphics的句柄,我的句柄数量(任务管理器->性能,系统句柄)和内存都在增长,而且超出了应有的数量。我忘记了每次迭代都要处理10个位图。我在这些位图上调用了dispose(),它解决了我的问题。

有了VS的内存快照,您可以拍摄多个快照并进行比较以查看更改。我使用任务管理器与使用VS的托管内存工具一样多。您可以使用任务管理器的->进程来查看发生了什么。您可以通过单击视图->选择列来添加列以跟踪诸如手柄,线程和GDI对象之类的对象。