c# - Xamarin.Forms UWP 中的内存泄漏
问题描述
我在 UWP 上运行了 Xamarin.Forms 应用程序,该应用程序的页面包含第三方组件。我已经导航到页面并离开,处理了页面和其中的所有组件。
我调用GC.Collect()
并期望页面及其控件不再在内存中。但我发现该页面仍在内存中,并且内存泄漏的底部是具有依赖句柄(或我假设的事件处理程序)
的第三方组件:
在向第三方报告此情况后,他们会回复以下内容:
我已经与开发团队讨论过这个问题,根据他们的说法,从可视化树中释放控件是由平台执行的,并且在删除它后不会立即执行,因此调用垃圾收集器并检查它是否仍在内存中不会意味着它正在泄漏。该平台可以在其他时间发布它。
现在我认为上述陈述不正确......但我在互联网或 MS 文档中找不到任何反驳它的东西。
据我所知,如果我处理一个页面及其所有内容并调用垃圾收集器,则该页面及其所有控件应该从内存中消失
它是否正确?
解决方案
所以我认为我的说法是正确的:
如果您在页面之间导航并处理页面及其所有组件并调用
GC.Collect()
. 然后页面及其所有组件应该从内存中消失。
我发现这篇文章正是这样做的: https ://www.xamarinhelp.com/tracking-memory-leaks-xamarin-profiler/
“一旦你的应用程序加载完毕,你会想要按下快照按钮,以获得基线。然后,让我们导航到第二页,然后再次按下。我现在将创建另一个快照。然后我可能会继续进行导航再按几次,然后再次按下快照。”
“在我们的示例中,我们在 MainPage 和 SecondPage 之间来回切换。在快照之间我们最多只能看到一个新的 SecondPage,但在这里我们看到多个已创建并且仍然处于活动状态。”
推荐阅读
- java - 如何用单个子字符串替换不同的可能子字符串(甚至可能具有不同的长度)?
- javascript - Convert JSON to array typescript
- postgresql - Data mismatch after Kafka JDBC Sink Connector
- python - while循环没有终止python
- python - FileNotFoundError:[Errno 2] 没有这样的文件或目录:'ifconfig'
- java - SendKeys not sending values to my form on Chrome Browser
- http - Dart 中请求之间的持久化参数
- node.js - 如何使用 mailparser npm 模块解析 node.js 中的电子邮件附件?
- c++ - 将我的 DLL 使用的辅助文件放在哪里有良好的做法
- python - 添加新列,每行作为另一列的前一个组值