2010-09-10 39 views
5

我有一個WPF(.net 3.5 sp1)應用程序,它在啓動時加載一堆數據(啓動需要幾秒鐘),但在數據加載後性能良好。 當應用程序運行時,如果我在一段時間內(例如幾個小時)沒有觸摸它,然後我切換它,它會非常緩慢地「醒來」。 我的問題:WPF應用程序從閒置回來時變慢

  1. 這是爲什麼?那是因爲.Net釋放了我從內存加載的大數據,它必須以某種方式恢復它?

  2. 即使我知道在應用程序最終完成之前我會隔離內存,我應該怎樣做才能防止這種行爲?

+1

刺在黑暗中,但我不知道它是不是操作系統本身將該內存投入交換文件(虛擬內存),然後必須從磁盤讀回。 – Jay 2010-09-10 20:10:28

+1

你知道Jay,可能是。我想知道這是否是真正的原因,以及我能做些什麼來防止這種情況發生,至少對於這個應用程序(強制它以更高優先級模式運行?)。謝謝你的評論。 – 2010-09-10 20:12:46

+1

你可以在這種情況下運行一個分析器嗎?是的,我推薦[EQATEC](http://www.eqatec.com/tools/profiler/)。 – Zamboni 2010-09-12 14:38:01

回答

0

我可以看到兩個出路:

  1. 訪問所有緩存數據的線程從GUI中分離(這可能會是很多工作改寫),
  2. 添加一些定時器觸發通話這將始終有效(可能只是從緩存中獲取一些隨機數據),並且它會使您的應用程序保持非空閒狀態,從而防止其內容轉到頁面文件。
+0

我喜歡你的第二個想法。謝謝。 – 2010-09-16 15:47:04

0

正如Jay所說,這幾乎肯定會發生,因爲應用程序的數據正在寫入頁面文件。

如果計算機處於您的控制之下,請嘗試關閉頁面文件。如果計算機有很多內存,並且一次不運行很多程序,則可能會發現實際上並不需要該頁面文件。

+0

嗨,羅蘭,電腦不在我的控制之下。用戶的電腦。 – 2010-09-16 15:45:49

+0

那麼你可以做的事情不多。您可以嘗試週期性地運行應用程序的數據並觸摸對象(如velijkoz建議的那樣),但是您無法觸摸所有內容。 GUI相關的東西仍然會被換出。 Windows不交換整個應用程序,它交換內存頁面。 – 2010-09-17 04:08:35