内存泄漏的 [Cycle Detected] 是啥?

Posted

技术标签:

【中文标题】内存泄漏的 [Cycle Detected] 是啥?【英文标题】:What is [Cycle Detected] with memory leak?内存泄漏的 [Cycle Detected] 是什么? 【发布时间】:2018-09-09 03:26:50 【问题描述】:

Visual Studio 2017 社区版

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

    在打开我的可疑用户控件之前,NewProgressNoteView.xaml。 在运行用户控件时,并且 退出 NewProgressNoteView.xaml 后。

然后我将快照 #3 与快照 #1 进行了比较。在结果表中,我强加了“NewProgressNoteView”的过滤器。下面是扩展顶部 Doctor_Desk.Views.NewProgressNoteView 的实例的结果。值得注意的是 '[Cycle Detected]' 感觉很可疑,但我不知道它的确切含义或如何使用这些信息来修复内存泄漏?接下来我该怎么做?

任何帮助将不胜感激。

TIA。

【问题讨论】:

【参考方案1】:

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

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

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

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

通往根目录的路径 - 不要被此信息以树状视图呈现的事实所迷惑,该树状视图通常表示儿童。根路径实际上显示了引用您选择的对象的父对象。 引用类型 - 显示所选对象引用的子类型。

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

Cycle Detected 仅表示内存分析器已找到直接或间接引用回您所选对象的父或子引用。因此,它添加了一个循环检测标记,而不是显示一个圆形树视图跟踪。

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

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

【讨论】:

另一个指向 MS 的错误链接(当然)我发现了这个:docs.microsoft.com/en-us/visualstudio/profiling/…

以上是关于内存泄漏的 [Cycle Detected] 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

_CrtSetBreakAlloc简单内存泄漏检测方法,解决Detected memory leaks!问题

A cycle was detected in the build path of project

A cycle was detected in the build path of project

A cycle was detected in the build path of project项目相互依赖

ef core 自引用类 报错System.Text.Json.JsonException: A possible object cycle was detected which is not sup

发现 Perl 内存泄漏