Windows Phone7 效能

來源:互聯網
上載者:User

Windows Phone 是資源有限的裝置。我們必須考慮電池使用時間、CPU/GPU 的處理能力、串連性、頻寬、儲存容量、多任務模型以及應用程式可以在其中啟動並執行記憶體量。Windows Phone 的設計很注重效能,而且對於建立具有更高效能的平台也非常謹慎。

效能

從使用者的角度來講,效能歸結於一點 - 即擁有具有響應性的應用程式。響應性應用程式能快速載入要顯示的資料並隨著使用者互動的發生快速做出響應。這種情況下,存在很多需要考慮的事情;首先,應用程式必須快速啟動。使用者不喜歡等待很長時間才能使用應用程式。Windows Phone OS 實際上會自動終止一個要花 10 多秒才能載入的應用程式。應用程式完全載入後,使用者在與應用程式互動時就會關注運行時效能;當嘗試最佳化 Windows Phone 應用程式的效能時,需要找到適合特定情況的正確的技術組合。在多個不同的硬體類型上全面測試應用程式。

記憶體

Windows Phone 製造商必鬚生產 RAM 至少為 256 MB 的手機以便進程在其中運行。許多手機附帶的 RAM 都超過 256 MB,但是這是個下限。因此我們不能假定應用程式在 RAM 大於 256 MB 的手機上運行。RAM 數量在 Windows Phone 上要比在案頭版本 Microsoft Windows 上受到較多的約束。應用程式可以使用的記憶體量比手機上的 RAM 數量要少得多。windows phone技術認證要求主題包含與記憶體佔用相關的認證要求,應用程式必須符合此要求,否則應用程式認證過程會失敗。

載入效能

應用程式的載入效能受幾個因素的影響。

1.應用程式集大小;

應用程式程式集越大,載入花費的時間就越長。若要協助將應用程式程式集的大小降到最小,可以刪除映像、媒體和 XML 檔案。這些內容仍然是 XAP 部署的一部分,但是應用程式程式集中不再保留它們。這些內容應該保留為程式集的外部內容。(對每個檔案將生產操作屬性設定為內容。)對於包含應用程式中很少導航到的映像的頁面,這樣做很有意義。在需要這些頁面上的映像之前,系統一直不會載入它們;本地化的字串應該置於單獨的程式集中。對於使用者可以導航到但並非一直需要的應用程式中包含許多頁面,則可以將其分隔到其他程式集中。然後只需在新程式集中引用頁面並且僅在需要時按需對其進行載入即可。

2.頁面初始化或者載入時執行的代碼量;

減慢應用程式載入速度的另一個因素是載入時執行的代碼數量;應該將放置到 Constructors 和 Loaded 事件的代碼降到最少,可以將該代碼放入繪製 UI 後發生的應用程式事件中,或者在後台線程上運行該代碼;實現這個目標的一種方式是,處理 LayoutUpdated 事件並在此處理常式中啟動長時間啟動並執行進程;

在主 UI 線程上啟動並執行任何代碼都會阻止與使用者的 UI 互動,直到該過程完成為止;阻止 UI 線程的服務或Api主要有:定位服務、推播通知、網路資訊和收音機。

ListBox控制項

ItemsControl 和 ListBox 的用法或許是應用程式可能遇到效能問題的最常見位置。若要正確使用這些控制項,需要考慮要在 ListBox 控制項中顯示多少項,對於 ListBox 控制項中的各個項來說,布局的複雜程度如何;具有包含映像及其他控制項的複雜資料範本的列表框可能會顯示地比較緩慢;

當滾動listbox時,這可能會導致螢幕急動和凍結,具有複雜嵌套堆棧面板和嵌套網格的資料範本可能會產生效能問題,最好將其簡化到具有正確列和行的單個網格,使用 ListBox 控制項存在多種方法,因此採取的設計方法取決於具體使用方式;對於複雜度、高重繪的listbox,最好啟用ui虛擬化;

Panorama 控制項

Panorama 控制項一次呈現所有的 UI,包括所有面板的所有 Silverlight 綁定;Panorama 面板上無法查看的動畫仍然可以進行動畫處理,該操作可能會導致效能損耗,如果正確使用,對某些互動來說,Panorama 仍然是一個好的選擇並且仍然可以達到好的效能。

最佳化 Panorama 效能,可以延後載入與所在的面板不相鄰的面板,然後,在使用者平移時,載入下一個相鄰的面板,盡量保持控制項和布局簡單;如果背景映像分布在 Panorama 面板上,則 Panorama 控制項還可能佔用更多記憶體;

Pivot 控制項

Pivot 控制項的效能通常優於 Panorama 控制項的效能;啟動後,Pivot 控制項會建立它啟動時所在的 Pivot 頁面和相鄰的 Pivot 頁面,若要使 Pivot 控制項更好地執行,可以將所有相鄰的 Pivot 頁面內部的所有內容的 Visibility 設定為 Collapsed,這會阻止它綁定或呈現任何資料。然後,當 Pivot 頁面位於視圖中時,將所有內容設定為可見,這時 UI 就會呈現該內容。

其他
  • 如果您希望顯示進度列,請使用不確定的自訂進度列。

  • 使用操作事件儘可能多地處理手勢。避免使用滑鼠事件。

  • 最小化或消除記憶體回收。這在 XNA Game Studio 遊戲中效果更明顯。

  • 如果希望動畫在資料載入到應用程式前發生,則可以延遲資料內容綁定或項目源的設定,直到動畫結束為止。

  • 導航回頁面時,您不必再次檢索資料並重新綁定該資料,除非發生了一些事情導致您需要重新整理資料。

  • ListBox 中 opacity = 0 的 TextBlock 會導致效能問題。

  • 避免在 ListBox 的資料範本內使用使用者或自訂控制項。

  • 在 ListBox 控制項中避免 Element 名稱綁定。

  • 每幀回調動畫都完全受 UI 線程支配,隨著 UI 線程中發生的操作越來越多,畫面播放速率會有所下降並且動畫也會受到影響。通過將 CacheMode 屬性設定為BitmapCache,至少可以避免重繪。

  • 應用程式中包括的任何媒體檔案(如聲音效果)都應該將其“產生操作”設定為“內容”而不是“資源”。對 Windows Phone 上的ApsaraVideo for Media Processing進行最佳化以使用檔案和網路流,而不是使用記憶體中的流。

  • 在應用程式中將資源密集型控制項分離到單獨的頁面,以便不會一次使用所有的控制項。例如,不要將 Bing 地圖和視頻放置在相同的頁面上。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.