首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UWP编译的绑定x:Bind产生内存泄漏

UWP编译的绑定x:Bind产生内存泄漏
EN

Stack Overflow用户
提问于 2015-09-15 16:36:44
回答 2查看 2.8K关注 0票数 23

在开发UWP应用程序时,我最近发现了相当多的内存泄漏,阻止了我的页面被GC收集。我的页面上有一个ContentPresenter,如下所示:

代码语言:javascript
复制
<ContentControl Grid.Column="0" Grid.Row="1" Content="{x:Bind ViewModel.Schedule, Mode=OneWay}">
</ContentControl>

在我删除内容或用动态{Binding}替换它之后--当我从页面导航时,页面就被收集起来了。否则它将保留在内存中。是bug还是我做错了什么?是否有一种方法可以在导航时释放和清除所有绑定?

更新:这似乎是微软内部的一个已知问题,正如here所说的那样。但就我自己的测试/应用程序使用情况而言,x:Bind保留的数据在一段时间后仍然会被收集,例如,当您导航到相同的页面或在一段时间内创建相同的控件时。我可以看到创建了新的对象,但在某个时候收集了旧的对象。

所以对我来说,这似乎不是一个引起内存不足的严重问题,它只是不允许像动态绑定那样快速地收集对象。

EN

回答 2

Stack Overflow用户

发布于 2016-08-23 19:08:30

由于这个问题,我在Microsoft connect上创建了错误。

https://connect.microsoft.com/VisualStudio/feedback/details/3077894/memory-leaks-in-c-uwp-apps-using-compiled-x-bind-bindings

解决此问题的方法是在页面卸载事件处理程序中显式调用Bindings.StopTracking()。这是因为编译绑定没有使用“弱事件”模式,而是直接订阅INotifyPropertyChanged的PropertyChanged事件。这是内存泄漏的原因之一。要取消订阅事件,可以调用Bindings.StopTracking()。编译后的绑定代码不会自动调用它。

票数 5
EN

Stack Overflow用户

发布于 2016-03-18 19:54:28

是的,它确实会导致内存泄漏,为了防止这一点,您可以使用以下步骤:

一旦您移出UI,请像UnityContainer一样使用IoC,并将ViewModel或View ContainerControlLifeTime

  • Assign设置为xaml.cs中的null to ViewModel属性。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32581432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档