2013-06-24 84 views
0

我正在構建一個Windows Phone應用程序,該應用程序可以在頁面中進行視頻捕獲,並在另一個頁面中具有自定義播放器。我使用自己的自定義編解碼器,因此播放器需要很多DispatcherTimer才能跟蹤UI部件上的多個行爲,並以編碼器部分的良好幀速率爲影片提供服務。導航時應用程序變得越來越慢

我試圖釋放所有DispatcherTimer,因爲我知道它們是CPU密集型的,但即使停止它們,我的應用程序仍然很慢。如果我按回來然後按照流程,每次速度除以兩。如果我不使用我的播放器,則可以。我的播放器只有3 DispatcherTimer,一個FileStream和一個圖像框。

我覺得DispatcherTimer仍然在內存中運行,即使它們在頁面上直接實例化爲私有,也是雙重實例化的。

我可以強制頁面釋放所有這些東西嗎?

其實我還不明白導航到當前頁面旁邊的頁面還是導航回來有什麼區別。我不知道如何在不調用InitializeComponents的情況下再次顯示頁面,所以我混淆了要釋放哪些資源以及保持完整的資源。

回答

1

我的執行速度問題實際上是由一些正在運行的DispatcherTimer導致的,所以我會回答它以將其歸檔。

解決辦法:

  1. 確保所有DispatcherTimer已直接實例化的頁面上,這樣我們就可以在代碼的任何地方廢掉他們。

  2. 在OnNavigatedFrom中,我殺了DispatcherTimerOnNavigatedTo,我用myDispatcherX = new DispatcherTimer()重新創建它們。

  3. 沒有「臨時」計時器,如「DispatcherTimer myTempTimer = new DispatcherTimer;在回調((DispatcherTimer)send).Stop(),因爲機會是,它仍保留在內存中,我們導航的應用程序。

+0

不錯!請接受你自己的答案:) – Oren

+0

需要等待48小時:)我很驚訝使用OnNavigateTo和OnNavigateFrom如此重要,我認爲這是一種解決方法,但是微軟表示,它是處理用戶界面元素狀態的地方,一旦你在某處導航。 –