内存泄漏的[循环检测]是什么?

时间:2018-03-30 04:42:37

标签: visual-studio memory-leaks performance-testing

Visual Studio 2017社区版

我正在尝试理解/使用Performance Profiler的内存使用情况,我认为应用程序中的内存泄漏(带有自定义控件的MVVM)。拍摄了三个快照:

  1. 在打开我的可疑用户控件之前,NewProgressNoteView.xaml。
  2. 在运行用户控件时,
  3. 退出NewProgressNoteView.xaml。
  4. 然后我将快照#3与快照#1进行了比较。在结果表中,我强加了一个“NewProgressNoteView”的过滤器。以下是扩展顶级Doctor_Desk.Views.NewProgressNoteView实例的结果。值得注意的是'[检测到周期]感觉可疑,但我不知道它究竟意味着什么,或者如何使用这些信息来修复内存泄漏?我接下来该怎么办?

    非常感谢任何帮助。

    TIA。

    enter image description here

1 个答案:

答案 0 :(得分:16)

查看托管内存时[循环检测]是什么?

在Visual Studios诊断工具中查看堆快照时,您有:

对象类型窗口,显示内存中保存的对象。

当您选择特定的对象类型时,您可以访问:

  • Root的路径 - 不要被这个信息呈现在树视图中,这通常表示孩子。 root的路径实际上显示了引用所选对象的Parent对象。
  • 引用的类型 - 显示所选对象引用的子类型。

这两个选项卡都是参考视图,可帮助您跟踪通过扩展树菜单显示的父对象和子对象的对象。

检测到周期仅表示内存分析器已找到父或子引用,直接或间接引用回所选对象。因此,不是显示循环树视图跟踪,而是添加循环检测标记。

这不是一件坏事或根本问题。

有关分析内存和参考视图的扩展说明的进一步阅读,请查看此msdn文章:https://msdn.microsoft.com/en-us/library/dn342825.aspx#Analyze%20memory%20use