gpt4 book ai didi

c# - UWP 编译绑定(bind) x :Bind produces memory leaks

转载 作者:IT王子 更新时间:2023-10-29 04:39:48 27 4
gpt4 key购买 nike

在开发 UWP 应用程序时,我最近发现了很多内存泄漏,导致我的页面无法被 GC 收集。我的页面上有一个 ContentPresenter,例如:

<ContentControl Grid.Column="0" Grid.Row="1" Content="{x:Bind ViewModel.Schedule, Mode=OneWay}">
</ContentControl>

在我删除内容或将其替换为动态 {Binding} 之后——当我从它导航时收集页面。否则它会保留在内存中。是错误还是我做错了什么?有没有办法释放和清除导航的所有绑定(bind)?

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

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

最佳答案

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

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

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

关于c# - UWP 编译绑定(bind) x :Bind produces memory leaks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32581432/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com