一起谈.NET技术,Silverlight开发廋身攻略(一)
2011-09-02 00:19
627 查看
相信大家在用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包中。如下图所示:
![](http://pic002.cnblogs.com/images/2010/169599/2010120914070379.png)
3、在LoadImage.Web项目中的ClientBin目录下也添加images目录,并且添加图片1.png、2.jpg。如下图所示:
![](http://pic002.cnblogs.com/images/2010/169599/2010120914145844.png)
4、在LoadImage项目的MainPage.xaml文件中添加如下代码:
设计期的效果图如下:
![](http://pic002.cnblogs.com/images/2010/169599/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包进行实例讲解。
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包中。如下图所示:
![](http://pic002.cnblogs.com/images/2010/169599/2010120914070379.png)
3、在LoadImage.Web项目中的ClientBin目录下也添加images目录,并且添加图片1.png、2.jpg。如下图所示:
![](http://pic002.cnblogs.com/images/2010/169599/2010120914145844.png)
4、在LoadImage项目的MainPage.xaml文件中添加如下代码:
<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>
设计期的效果图如下:
![](http://pic002.cnblogs.com/images/2010/169599/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包进行实例讲解。
相关文章推荐
- 一起谈.NET技术,Silverlight开发廋身攻略(二)
- 一起谈.NET技术,Silverlight 游戏开发小技巧:昼夜交替动画
- 一起谈.NET技术,Silverlight 游戏开发小技巧:冲击技能特效制作
- 一起谈.NET技术,Silverlight 游戏开发小技巧:传说中的透视跑马灯
- 一起谈.NET技术,Silverlight 游戏开发小技巧:技能冷却效果2(Cooldown)2
- 一起谈.NET技术,Silverlight 游戏开发小技巧:技能冷却效果(Cooldown)
- 一起谈.NET技术,Silverlight 游戏开发小技巧:血条和进度条
- 一起谈.NET技术,Silverlight 游戏开发小技巧:动感小菜单
- Silverlight开发廋身攻略(“.NET研究”一)
- 一起谈.NET技术,Silverlight 游戏开发小技巧:动感弹出动画
- 一起谈.NET技术,Silverlight 游戏开发小技巧:轨迹跟随效果
- 一起谈.NET技术,Silverlight 游戏开发小技巧:动感小菜单2
- 一起谈.NET技术,Silverlight 游戏开发小技巧:透明背景的Silverlight程序
- 一起谈.NET技术,Silverlight 游戏开发小技巧:星球大战字幕效果
- 一起谈.NET技术,Silverlight 游戏开发小技巧:升级和传送点特效1
- 一起谈.NET技术,Silverlight 游戏开发小技巧:实现街霸4的选人界面
- 一起谈.NET技术,Silverlight 游戏开发小技巧:扇形排列元素
- 一起谈.NET技术,Silverlight 游戏开发小技巧:传送点特效制作
- 一起谈.NET技术,Silverlight面向客户端,HTML5面向Web
- 一起谈.NET技术,回顾.NET Remoting分布式开发