我正在构建一个Windows Phone应用程序,它在一个页面中进行视频捕获,并在另一个页面中有一个自定义播放器。我正在使用自己的自定义编解码器,因此播放器需要大量DispatcherTimer
来跟踪UI部分上的几个行为,并以编解码器部分的良好帧速率提供电影。
我正在尝试释放所有DispatcherTimer
,因为我知道它们是CPU密集型的,但即使停止它们,我的应用程序仍然非常慢。如果我按后退然后按流程,速度每次除以2。如果我不使用我的播放器,那就可以了。我的播放器只有3个DispatcherTimer
,一个FileStream和一个图像框。
我觉得DispatcherTimer
仍然在内存中运行,即使它们在页面上直接实例化为私有,也会被双重实例化。
我可以强制页面释放所有这些内容吗?
实际上我还不明白导航到当前页面旁边的页面或导航回来之间有什么区别。我不知道如何在不调用InitializeComponents的情况下再次显示页面,所以我对要释放哪些资源以及保持完整的资源感到困惑。
答案 0 :(得分:1)
我的执行速度问题确实是由一些正在运行的DispatcherTimer引起的,所以我会回答它以使其存档。
解决方案:
确保所有DispatcherTimer
都已直接在页面上实例化,以便我们可以在代码中的任何位置取消它们。
在OnNavigatedFrom中,我终止DispatcherTimer
,在OnNavigatedTo
中,我使用myDispatcherX = new DispatcherTimer()重新创建它们;
没有“临时”计时器,例如回调中带有DispatcherTimer myTempTimer = new DispatcherTimer;
的{{1}},因为它可能会保留在我们导航的应用程序的内存中。