【发布时间】:2017-02-04 04:33:14
【问题描述】:
在 UWP (XAML / C#) 中,我使用 Frame.Navigate(typeof(Page2));,在 Page2 的 C# 中,我使用计时器,当我使用 Frame.GoBack(); 时,帧确实返回,但计时器并没有停止 - 我的意思是页面和它的所有组件仍在后台运行,因此该应用程序消耗了过多的 RAM。如何“杀死”页面?
注意:如果用户使用此导航 10 次,页面在后台是 10 次,这是不好的..
【问题讨论】:
-
你用什么定时器?
-
Windows.UI.Xaml.DispatcherTimer,但这不是定时器的问题(我只是通过_timer.Tick处的定时器和断点找到它,但问题是所有组件和所有页面仍在后台)。 -
离开页面后不要忘记明确停止计时器。
DispatcherTimer在运行时在Dispatcher和您的页面之间创建一个强引用。 -
所以在
protected override void OnNavigatedFrom中我将使用_timer.Stop();,但仅此而已?页面的其他组件和数据实体会被垃圾回收器移除吗? -
它会,如果没有其他对页面的引用可以防止它被 GC'ed。您还应该寻找对您的页面的任何直接引用、来自静态对象的非取消订阅事件、复杂的数据绑定——所有这些都可能导致内存泄漏。