什么是内存泄漏的“循环侦测”?

35

Visual Studio 2017 社区版

我试图使用性能分析器的内存使用情况,来查找我的应用程序中(MVVM与自定义控件)可能存在的内存泄漏。我拍摄了三张快照:

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

然后我将第3个快照与第1个快照进行了比较。在得到的表格中,我加了一个 "NewProgressNoteView" 的过滤器。下面是展开顶层 Doctor_Desk.Views.NewProgressNoteView 实例的结果。值得注意的是 '[Cycle Detected]' 感觉很可疑,但我不知道它确切地意味着什么或如何使用这些信息来修复内存泄漏?接下来该怎么办?

非常感谢任何帮助。

TIA。

输入图像描述

1个回答

53

查看托管内存时,什么是“检测到循环引用”?

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

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

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

  • 根路径 - 不要被呈现为子代的展开树菜单所迷惑。 根路径实际上显示引用所选对象的父对象。
  • 引用类型 - 显示所选对象引用的子类型。

这两个标签都是引用视图,帮助您通过扩展树形菜单跟踪一个对象的父/子引用关系。

检测到循环引用只是意味着内存分析器已经发现父对象或子对象引用直接或间接地返回到所选对象。 因此,它不会显示循环树形视图跟踪,而是添加检测到循环引用标记。

这并不一定是坏事或者你的根本问题。

有关分析内存和扩展引用视图的更多阅读,请查看此msdn文章:https://learn.microsoft.com/en-us/visualstudio/profiling/analyze-memory-usage?view=vs-2019


1
又是一个指向微软的糟糕链接(当然了)。我找到了这个链接: https://learn.microsoft.com/en-us/visualstudio/profiling/analyze-memory-usage?view=vs-2019 - kstubs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接