Via*_*lau 20 c# xaml windows-runtime winrt-xaml uwp
在开发UWP应用程序时,我最近发现了很多内存泄漏,导致我的页面被GC收集.我的页面上有一个ContentPresenter,如:
<ContentControl Grid.Column="0" Grid.Row="1" Content="{x:Bind ViewModel.Schedule, Mode=OneWay}">
</ContentControl>
Run Code Online (Sandbox Code Playgroud)
删除内容后,或用动态{Binding}替换它 - 当我从中导航时收集页面.否则它会留在内存中.是错误还是我做错了什么?有没有办法释放并清除导航时的所有绑定?
更新: 它似乎被说成是微软内部的一个已知的问题在这里.但是,就我自己的测试/应用程序使用情况而言,x:Bind保留的数据仍会在一段时间后收集,例如,当您导航到相同的页面或创建相同的控件一段时间.我可以看到创建了新对象,但在某些时候收集了旧对象.
所以对我而言,它似乎并不是导致内存不足的严重问题,它只是不允许像动态绑定那样快速收集对象.
由于这个问题,我在 Microsoft 连接上创建了错误。
解决此问题的方法是在页面 Unloaded 事件处理程序中显式调用 Bindings.StopTracking()。这是因为编译绑定不使用“弱事件”模式并且直接订阅 INotifyPropertyChanged 的 PropertyChanged 事件。这是内存泄漏的原因。要取消订阅事件,您可以调用 Bindings.StopTracking()。编译后的绑定代码不会自动调用它。
小智 2
是的,它确实会导致内存泄漏,为了防止您可以使用以下步骤:
归档时间: |
|
查看次数: |
2267 次 |
最近记录: |