[Universal Apps] Page Caching

Windows Runtime Apps 中有個 Page Caching (頁面快取) 的功能, 這一篇來談談這個功能的效果, 影響與如何使用這個功能.

Frame.CacheSize

        Windows Runtime Apps 中有個 Page Caching (頁面快取) 的功能, 這一篇來談談這個功能的效果, 影響與如何使用這個功能.

 

 

        1. 先介紹與 Page Chaching 相關的屬性 :

        (1) Page.NavigationCacheMode : 這個屬性的值型別是 NavigationCacheMode 列舉 , 這個列舉有以下三個值 :

             (a) Disabled : 代表不使用頁面快取

             (b) Required : 永遠使用頁面快取

             (c) Enabled : 使用頁面快取, 但會受到 Frame.CacheSize 設定的影響.

 

 

        (2) Frame.CacheSize : 這個屬性的值型別是 int , 代表在這個 Farme 中可以有多少個 Page.NavigationCacheMode 屬性設定為 NaviagationCacheMode.Enabled 的頁面可以被放入快取中. 如果這個值被設定為 1, 而有超過一個頁面被設定為 Enabled, 則只有最後一個頁面會被保留.

 

        2. 在哪個地方設定 Frame.CacheSize :

        在 App.xaml.cs 中可以找到一行 rootFrame.CacheSize = 1; 代表預設的情況是快取的容量只有一個頁面 (指 Page.NavigationCacheMode 屬性設定為 NaviagationCacheMode.Enabled 的頁面 ), 可以修改這個值增減其容量.

 

 

        3. Page Caching 的效果 :

        我在之前的文章 [Universal App] 頁面切換的流程 中曾經提到, 當一個 App 由 MainPage 瀏覽至 SubPage 再由 SubPage 退回 MainPage 時, 會重新產生 MainPage 的執行個體, 因為當 App 移動至 SubPage 後, 原有的 MainPage 的執行個體會被丟棄 , 而 Page Caching 會改變這樣的行為, 如果 MainPage 在這過程中是被放入快取中的話, 它的執行個體會被保留, 而當 App 從 SubPage 退回時將會直接取用這個被保留的執行個體, 而不會產生一個新的. 另一個情形是如果 SubPage 被設定成啟用快取, 那當你從 SubPage 退回 MainPage 時, SubPage 的執行個體也會被保留.

 

image

       

 

        4. Page Caching 的影響:

        有了 Page Caching, 基本上會省掉儲存頁面上資料的功能, 因為其執行個體一直保留著, 但過度使用會引發另外一個問題 -- memory leak, 在一般的 PC 或 NB 上或許會有足夠的記體體讓你存下一大堆快取, 但在記憶體受限的平板或手機上, 這就會是一個大問題, 記憶體負載過大可能會導致 App 閃退, 所以還是得謹慎使用此功能.