首页 > 解决方案 > Xamarin.Forms UWP 中的内存泄漏

问题描述

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

我调用GC.Collect()并期望页面及其控件不再在内存中。但我发现该页面仍在内存中,并且内存泄漏的底部是具有依赖句柄(或我假设的事件处理程序) 的第三方组件:在此处输入图像描述

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

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

现在我认为上述陈述不正确......但我在互联网或 MS 文档中找不到任何反驳它的东西。

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

它是否正确?

标签: c#xamarinxamarin.formsuwpmemory-leaks

解决方案


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

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

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

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

“在我们的示例中,我们在 MainPage 和 SecondPage 之间来回切换。在快照之间我们最多只能看到一个新的 SecondPage,但在这里我们看到多个已创建并且仍然处于活动状态。”


推荐阅读