【问题标题】:Using Visual Studio Diagnostic Tool to investigate memory consumption/leak使用 Visual Studio 诊断工具调查内存消耗/泄漏
【发布时间】:2019-01-21 19:16:25
【问题描述】:

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

所以我的程序会不断分配越来越多的内存,直到我得到OutOfMemoryException

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

【问题讨论】:

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


    【解决方案1】:

    当内存达到令人怀疑的高水平时,您需要暂停调试器,然后使用“拍摄快照”来获取内存分配的快照。然后,您可以分析哪些对象使用了不同的内存量。

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

    【讨论】:

    • 感谢您的回答!实际上,通过执行您的建议,“内存差异”视图让我意识到给定的昂贵构造函数被无意中在紧密循环内调用。现在我能够解决这个问题,这远非显而易见,如果没有诊断工具,将很难找到!
    【解决方案2】:

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

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

    使用 VS 的内存快照,您可以拍摄多个快照并比较它们以查看发生了什么变化。我使用任务管理器的次数与使用 VS 的托管内存工具一样多。您可以使用任务管理器的 -> 进程来查看发生了什么。您可以通过单击视图 -> 选择列来添加列来跟踪对象,例如句柄、线程和 GDI 对象。

    【讨论】:

      猜你喜欢
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 2012-10-09
      • 2010-12-23
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      相关资源
      最近更新 更多