什么是内存泄漏的 [Cycle Detected]?

What is [Cycle Detected] with memory leak?

Visual Studio 2017 社区版

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

  1. 在打开我的可疑用户控件之前,NewProgressNoteView.xaml。
  2. 当时运行用户控制,
  3. 退出后NewProgressNoteView.xaml.

然后我将快照 #3 与快照 #1 进行了比较。在生成的 table 中,我强加了一个 "NewProgressNoteView" 的过滤器。下面是topDoctor_Desk.Views.NewProgressNoteView的实例展开后的结果。值得注意的是“[Cycle Detected]”感觉可疑,但我不知道它的确切含义或如何使用此信息来修复内存泄漏?接下来我该做什么?

如有任何帮助,我们将不胜感激。

TIA。

查看托管内存时 [Cycle Detected] 是什么?

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

对象类型 Window 显示内存中保存的对象。

当您 select 特定对象类型时,您可以访问:

  • 根路径 - 不要被此信息以 tree-view 形式显示的事实所迷惑,通常表示儿童。根路径实际上显示了引用您 select 编辑的对象的父对象。
  • 引用类型 - 显示 selected 对象引用的子类型。

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

Cycle Detected 只是意味着内存分析器已经找到直接或间接引用回您的 selected 对象的父引用或子引用。因此,与其显示循环 tree-view 跟踪,不如添加循环检测标记。

这不一定是坏事或您的根本问题。

要进一步阅读有关分析内存和参考视图的扩展说明,请查看这篇 msdn 文章:https://docs.microsoft.com/en-us/visualstudio/profiling/analyze-memory-usage?view=vs-2019