提高 Silverlight 應用程式性能


提高 Silverlight 應用程式性能


本文講述使 Microsoft Silverlight 應用程式快速、流暢執行的性能小提示。

主要性能提示:

多種平台和瀏覽器上的測試
在開發期間將 EnableFrameRateCounter 設定為 true
Silverlight 外掛盡量少用透明背景
使用 Silverlight 動畫,而不是自己建立每影格組成的動畫
避免對文字大小使用動畫
避免使用 Windowless(無視窗)模式
將可能使用可見性而不使用不透明度
Silverlight 使用多核呈現和媒體回放
在全螢幕模式下,隱藏不用的對象
不要對 MediaElement 對像使用 Width 和 Height 屬性
不要對 Path 對像使用 Width 和 Height 屬性
當 Downloader(下載器) 結束時,分離事件並設定為 null
將 CPU 密集的工作拆分成更小的任務


多種平台和瀏覽器上的測試


如果你正在為多種操作系統(例如 Macintosh 和 Windows)和多種瀏覽器(例如Microsoft Internet Explorer、Mozilla FireFox 和 Apple Safari)開發基於 Silverlight 的應用程式,千萬要記住使用你要部署的操作系統和瀏覽器進行一般測試。不同系統和瀏覽器之間行為的不同和 Silverlight 處理這些行為的程式碼會影響程式性能。尤其是你的應用程式有嵌入的透明背景外掛和使用大量 JavaScript 程式碼的時候,應當進行全面測試。

在開發期間將 EnableFrameRateCounter 設定為 true


外掛的呈現性能隨指定的宿主參數和內容的複雜程度而變化。我們推薦你在程式開發期間將 EnableFrameRateCounter 屬性設定為 true,這個設定將在瀏覽器的狀態欄裡顯示呈現的 Silverlight 內容的影格速率(fps,frames-per-second),這樣,你就能為你的應用程式調優。

Silverlight 外掛盡量少用透明背景


透明背景或許是很有用的,例如,當你嵌入的 Silverlight 外掛包含一個非矩形的形狀如汽車的照片時,你不想顯示汽車周圍的矩形內容。你可以設定透明的 Silverlight 外掛背景只讓汽車的圖片顯示出來。然而,使用透明的 Silverlight 外掛背景對性能有重大影響,因此,應盡可能地避免使用這種功能。

使用 Silverlight 動畫而不是自己建立每影格組成的動畫


使用 Silverlight 外掛內嵌的動畫比你使用 JavaScript 建立自己的每影格動畫要快的多。 隨時間推移使用元素樹的推薦做法是使用動畫系統。這種方法是與平台和瀏覽器無關的,並且是最有效的。

避免對文字大小使用動畫


對文字大小進行設定動畫潛在地會使用大量系統資源。這是因為 Silverlight 在呈現文字時使用 hinting(字體微調) 平滑文字技術。如果如果對文字大小設定動畫(通過 Transform 對像或者 FontSize 屬性), Silverlight 對每影格都進行微調,這會導致資源的浪費,也可能會導致影格的丟失。 如果你的程式需要動態修改文字大小,最好使用向量圖形代替文字。

避免使用 Windowless(無視窗)模式


只在必要時才設定 Windowless 屬性為 true ,Windowless 模式是很費資源的,可能導致動畫的破裂。

盡可能使用 Visibility(可視性) 而不使用 Opacity(不透明度)


如果你想簡單地讓對象可見或不可見而不是使用部分不透明度或者淡出淡入對象,請使用 Visibility 屬性而不使用 Opacity 屬性。Opacity 意味著較高的代價,這是因為,對像仍然是可點選的,並且需要呈現。將 Visibility 設定為 Collapsed 可避免這些問題。

Silverlight 使用多核呈現和媒體回放


Silverlight 利用多核的優點進行內容呈現和媒體回放。因此,你的 Silverlight 程式在多核系統上表現得會更好。

在全螢幕模式下,隱藏不用的對象


當程式進入到全螢幕模式時,隱藏所有在全螢幕模式下不需要呈現的對象,或者從元素樹中斷開

他們。你可以將對象的 Visibility 屬性設定為 Collapsed。

不要使用 MediaElement 對象的 Width 和 Height 屬性


盡量避免明確設定 MediaElement 對象的 width 和 height 屬性。相反,讓媒體元素以它原本的大小顯示,如果你需要這些元素的顯示大小,最好使用媒體編碼工具重新將媒體編碼成期望的大小。

不要使用 Path 對象的 Width 和 Height 屬性


不要設定 Path 對象的 Width 和 Height 屬性。設定這些屬性會導致額外的拉伸,影響性能。相反,明確設定 Path 對象的座標控制它的形狀和位置。

當 Downloader(下載器)完成時,分離對象並設定為 null


當你使用 Downloader 對像時,當 Completed 事件觸發後,分離掉 Downloader 的所有事件處理器,然後將 Downloader 設定為 null。

將 CPU 密集的工作切分成更小的任務


當 JavaScript 執行時,外掛停止呈現。通常,在事件處理器中做點少量的工作時,這不是什麼問題。然而,如果你的程式需要在 JavaScript 線程上執行大量的CPU 密集的工作,我們建議你將這個工作劃分為更小的任務。這將會保持期望的影格速率進行呈現。