Silverlight開發廋身攻略(一)

     相信大家在用Silverlight做應用開發時,隨着項目的進展系統功能越來越多,肯定爲Xap包越來越大而煩惱,Xap包的大小直接影響應用程序的加載速度,給用戶造成不良的用戶體驗。我也曾爲這個問題頭痛過,經過在網上查閱資料和項目實踐發現可通過以下三種方式給Silverlight應用程廋身。

    1、定期檢查系統項目模塊的引用集,移除多餘的引用庫

    2、圖片資源文件,如果不是必須放在資源中的,可以採用按需加載

    3、將系統劃分成多個Silverlight項目,然後根據需要進行Xap加載

    下面我將結合實例來對三種方法進行說明:

    一、定期檢查,移除多餘引用庫

    在我們實際項目開發中,我們有時因技術的需要會引用一些第三方控件、.Net FrameWork框架下的動態庫,但後來發現不需要這麼做只是在界面上或代碼中移除控件,沒有對程序集引庫進行檢查移除,從而導致在Xap包中打入了一些無用動態庫,造成資源浪費,Xap包體積增大。這種方法簡單,只要在項目日常管理中注意就能解決。

    二、圖片資源按需加載

    圖片資源在應用系統中佔有相當大的比重,如我們的界面上的背景、按鈕圖標等等。它們都被編譯到項目dll文件中,然後打包到Xap中。爲了減小Xap包的大小,我們可以把圖片資源和Xap包分開存放,當系統需要進行下載。

    操作實例:

    1、用Vs2010添加名稱爲LoadImage的SL Application項目

    2、在SL Application項目中添加images文件夾,然後在文件夾中添加兩張圖片1.png、2.jpg,將兩張圖片的Build Action屬性由原來默認"Resource"改成"DesignData",這麼做的好處是圖片在設計期可用,便於界面設計,程序編譯時圖片不在Xap包中。如下圖所示:

    2010120914070379.png

    3、在LoadImage.Web項目中的ClientBin目錄下也添加images目錄,並且添加圖片1.png、2.jpg。如下圖所示:

    2010120914145844.png

    4、在LoadImage項目的MainPage.xaml文件中添加如下代碼:

   

ContractedBlock.gif ExpandedBlockStart.gif 代碼
 
    
< Grid x:Name ="LayoutRoot" >
< Grid.Background >
< ImageBrush ImageSource ="/images/1.png" />
</ Grid.Background >
< Image Grid.Column ="1" Source ="/images/2.jpg" Height ="300" Width ="400" ></ Image >
</ Grid >

    設計期的效果圖如下:

    2010120916425136.png  

    5、圖片按需加載的原理

    圖片路徑一般有反斜槓開頭的相對路徑和程序集+資源路徑兩種寫法,例如:/images/1.png、/LoadImage;component/images/1.png。前一種以反斜槓開頭的相對路徑,代表的相對位置是應用程序運行的根目錄,即.xap壓縮包內,若在這其中尋找不到要引用的文件,則相對路徑的回退機制(fallback mechanism )自動在在.xap所在的遠程目錄中查找,本例即爲Web網站的ClientBin目錄中尋找加以查找引用,如果兩個位置都沒有,纔會發生錯誤;後一種程序集+資源路徑則代表的絕對位置是引用該圖片的XAML文件所在的目錄,本例即.xap壓縮包內的嵌入資源中,一般都在程序集的dll文件中,通過reflector反編譯可以發現圖片資源。

    此實例編譯發佈後,LoadImage.Xap文件大小隻有4k,如果將圖片以資源(Resource)的形式打入.XAP包中,則LoadImage.Xap的大小是636k。

    按需加載圖片實例源代碼:下 載

    在下一節中,將涉及第三種廋身方法:按需加載XAP包,動態加載功能模塊,正在更新中…… 

   

轉載於:https://www.cnblogs.com/liuqiwu/archive/2010/12/09/GSUnis04.html