老生常谈的一个按需下载的问题!

zdqyundou 2010-05-18 11:36:10
接触Silverlight不是很久,看到一些第三方厂商的产品做演示的时候,有按需下载的模式。自己也很想做一个。查了很多资料也没怎么看明白。
目前我的项目是Silverlight Navigation Application,每个页面都是继承于Page类,相信很多人都这样用,但是随着Page数量的增加,编译后XAP文件越来越大。我把主菜单放在了MainPage.xaml上面 ,点击相应的菜单我希望才下载指定的Page。应该怎么做呢?
...全文
107 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cpt_adt2010 2010-05-21
  • 打赏
  • 举报
回复
好难啊,目前还在学如何做东西,优化以后再说
纷享刘晨 2010-05-20
  • 打赏
  • 举报
回复
恩。从理论上来说是可以按照Page划分的。但是如果真的做过实际项目,你会发现能够分开的可能性是非常低的。

按需加载的基本逻辑,楼上都说了,不再赘述了。

如果真的有按需加载的需要,建议学习一下MEF这个框架。MEF就是专门用来处理这个问题的。
THE_ROCK 2010-05-19
  • 打赏
  • 举报
回复
to websco,你说的很好“我觉得主要问题还是在于如何将各个 Page 打包至不同的 XAP 包中,这是考验系统设计功力的。”

貌似我的项目还没有这样的需要把各Page打包到各XAP中去。我现在只是将项目的这是分散压缩了,大小也缩小了,自动去按需吧!
jv9 2010-05-18
  • 打赏
  • 举报
回复
按需加载分为两部分,一是加载XAP资源文件,另一个是加载DLL文件:

1. 按需加载资源文件

如果.xap中包含了庞大的资源文件,会延长下载到客户的时间的,如果这些资源是在需要时才"按需"下载,会带来更好的用户体验。这个实现起来比较简单:通过WebClient 的OpenReadAsync方法下载所需的资源文件,例如图片,下载完成后即可供程序使用了。

2.按需加载Assembly .dll

方法:

1. 通过WebClient 下载Assembly的.dll文件

2. 通过AssemblyPar t实现动态加载Assembly

注意:在调用动态加载Assembly中定义的类的方法上使用[MethodImpl(MethodImplOptions.NoInlining)] ,禁掉JIT method inline, 避免JIT异常


对于你的项目结构来说,可以把功能模块进行划分和抽象,然后设置按需下载即可。

参考:http://www.silverlightchina.net/html/tips/2010/0505/1099.html
websco 2010-05-18
  • 打赏
  • 举报
回复
然后才是从不同的 XAP 包中载入不同的 Page ,这个只是技术问题,大致

根据Uri下载 XAP 包
由 Application.GetResourceStream() 得到 StreamResourceInfo
然后加载 Assembly ,
然后通过 Reflection 得到 Page 的类型,
然后 Activator.CreateInstance( Page类型 )

技术问题而已。

我觉得主要问题还是在于如何将各个 Page 打包至不同的 XAP 包中,这是考验系统设计功力的。
websco 2010-05-18
  • 打赏
  • 举报
回复
首先第一步得要把各个Page分类(比如按子模块),然后分别打包至不同的 XAP 包中,
也就是说要把各个Page分散到不同的Silverlight应用程序项目中,而且有可能有一些Page要共享,至于类库项目的共享,这是肯定的会碰到的。
这些不同的Silverlight应用程序可以共存于同一个Silverlight解决方案中,也可以分散在不同的解决方案中。

楼主先把这一步解决了再考虑按需下载吧。
键盘tops舞者 2010-05-18
  • 打赏
  • 举报
回复
这个问题提的很好,我也关注一下,虽然我没实现
加速人生下载地址:http://down.admin5.com/network/jiasurensheng.html        电脑卡,是个让人无奈的话题,不给力的电脑既影响办事效率又影响使用者的心情!你是否正在为卡得“一动不动”的电脑系统而纠结不已?小编分享了一些关于各种情况下电脑卡的解决办法,帮助你提速电脑系统,不再为电脑卡纠结!顺便推荐给大家一款功能齐全,使用方面的电脑系统加速软件——加速人生。                 相信不少人都为电脑开机速度慢而着急过,开机速度慢主要有个方面的原因,一是桌面上摆放的文件过多,系统读取要时间。这个问题的解决方法很简单,就是收拾整理好不常用的文件,尽量避免堆积在桌面上。另一方面,是开机自启软件、程序过多导致。这个问题,我们可以用加速人生的“开关机加速”功能来解决。加速人生会自动检测开机自启的软件、程序,提示用户进行“禁止”处理,我们可以根据自身的求禁止一些无用的软件和程序的开机启动。         电脑用了几个小时后,感觉越来越卡,这种情况除了病毒之外,一般都是因为电脑中打开了过多的应用程序,cpu和内存占用过高导致。我们可以用加速人生来关闭一些暂时不用的进程,来提升电脑系统的运行速度。找到加速人生的“程序清理”功能,我们可以根据加速人生的提示来对占用cpu或内存过高的程序进行处理。细心的用户会发现加速人生还能检测提示关闭系统的无用程序。这是加速人生的一大亮点,可以更全面的帮助用户提升电脑系统运行速度。           很多人都会遇到这样的一种情况,电脑刚买的时候感觉用的速度很快,用的时间一长,就发现电脑越来越卡。其实这是因为,随着电脑系统的使用时间变长,电脑里会累积大量的垃圾文件拖系统运行的速度。如何清理掉这些烦人的垃圾文件呢?在加速人生找到“系统清理”功能,来和加速人生一起“一键加速”给你的电脑系统来个“大扫除”吧!          “臃肿,体积庞大”的系统盘运行起来当然各种不给力,加速人生针对系统盘设置了专门的清理功能——系统盘大瘦身。在功能界面,点击“立即瘦身”按钮,即可轻松还原系统盘“苗条”的“身材”。         电脑卡是个老生常谈问题,我们在日常使用电脑时,要注意对电脑系统的整理和维护。选择一款合适的清理工具,定期对电脑系统进行清理很重要,不妨试试加速人生,一键式操作,全面提速你的电脑,轻松还你洁净顺畅的系统!

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧