Xamarin.Forms UWP 中的内存泄漏

Posted

技术标签:

【中文标题】Xamarin.Forms UWP 中的内存泄漏【英文标题】:Memory leaks in Xamarin.Forms UWP 【发布时间】:2021-01-14 04:40:09 【问题描述】:

我在 UWP 上运行 Xamarin.Forms 应用程序,该应用程序的页面包含第三方组件。我已经导航到页面并离开,处理了页面和其中的所有组件。

我调用GC.Collect() 并希望页面及其控件不再存在于内存中。但我发现该页面仍在内存中,并且在内存泄漏的底部是具有 Depenent Handle (或我假设的事件处理程序)的第三方组件:

在向第三方报告此情况后,他们会回复以下内容:

我已经与开发团队讨论过这个问题,根据他们的说法,从可视化树中释放控件是由平台执行的,并且在删除它后不会立即执行,因此调用垃圾收集器并检查它是否仍在内存中并不意味着它正在泄漏。该平台可以在其他时间发布它。

现在我认为上述说法不正确......但我在互联网或 MS 文档中找不到任何可以反驳它的内容。

据我所知,如果我处理一个页面及其所有内容并调用垃圾收集器,则该页面及其所有控件应该从内存中消失

这是正确的吗?

【问题讨论】:

【参考方案1】:

所以我认为我的说法是正确的:

如果您在页面之间导航并处理该页面及其所有 组件并调用GC.Collect()。然后页面及其所有 组件应该从内存中消失。

我发现这篇文章正是这样做的: https://www.xamarinhelp.com/tracking-memory-leaks-xamarin-profiler/

“一旦你的应用程序加载完毕,你会想要按下快照按钮, 获得基线。然后,让我们导航到第二页,然后按 再次回来。我现在要创建另一个快照。那我可能会继续 多做几次导航,然后再按一下快照。”

"在我们的示例中,我们在 MainPage 和 第二页。我们最多只能看到一个新的 SecondPage 快照,但在这里我们看到多个已创建并且仍然存在 活跃。”

【讨论】:

以上是关于Xamarin.Forms UWP 中的内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

内存泄漏处理Xamarin.Forms

将 UWP 标头模板中的图标与 xamarin.forms 一起使用

从UWP库中加载图标作为Xamarin.Forms中的图像

hockeyapp 在 xamarin.forms 应用程序中的 UWP 上引发异常

Xamarin Forms中的Android,IOS和UWP版本

Xamarin Forms - 防止键盘在 UWP、Android、iOS 中的条目焦点上显示