代码之家  ›  专栏  ›  技术社区  ›  heltonbiker

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

  •  1
  • heltonbiker  · 技术社区  · 5 年前

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

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

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

    enter image description here

    2 回复  |  直到 5 年前
        1
  •  2
  •   devNull    5 年前

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

    this link 有关使用诊断工具测量内存使用情况的详细信息。

        2
  •  1
  •   jreese    5 年前

    这也很大程度上取决于你在做什么,也就是说,你有一个巨大的文件吗?或者你有上千个或者上百万个更小的物体、文件或者图像?

    我最近遇到的一个内存使用率很高的情况是System.Graphics中的句柄,我的句柄(任务管理器->性能、系统句柄)和内存的数量都在不断增长,而且远远超过了它们应该有的数量。我忘记了每次迭代处理10个位图。我在那些位图上调用了dispose(),它解决了我的问题。

    使用vs的内存快照,您可以获取多个快照并进行比较,以查看更改了什么。我使用任务管理器和使用vs的托管内存工具一样多。您可以使用任务管理器的->进程查看正在进行的操作。通过单击“查看”->选择列,可以添加列以跟踪对象,如句柄、线程和GDI对象。