WP7应用运行效率之谜:流畅的代价很高

fmms 12年前
     <p>        多开发过 Android 的程序员,表示 WP7 比 Android 流畅,再给你大家透露些微软为了掩盖 .Net 运行缓慢的例子。</p>    <p>        1. WP7 SDK 提供的默认工程,都有一个启动的封面图片,默认文件名为 SplashScreenImage.jpg 这个图片,一般系统自带的应用为 EXE 格式由于使用 PE 加载器以 Native 直接处理 ARM 指令自然快,而第三方软件一般进入时都有一个欢迎屏就是为了掩盖托管语言的高效开发,低效运行等问题。</p>    <p>        2. 同时在很多方面微软 WP7 优化的并不是说比 Google 的 Android 好,微软限制了后台应用的运行,比如最多不会超过 5 个目前在 WP7.5 Mango 上,所谓的第三方后台运行是通过 Background Agent 实现的,分为即时和资源敏感型,如果你的应用需要长期运行,就必须将这部分逻辑封装为一个 Dll 最终由 WP7 系统代理运行,和你的主应用其实工作在不同的空间,因为你的应用和后台代理虽然均为 Dll 但仍然独立。你的应用可能被结束了,而后台代理那个 dll 可能仍然还在工作,但是限制十分苛刻,比如说内存占用不能超过 5MB,否则随时被结束掉,很多 API 无法使用等。Android 有时候不流畅主要由于小 RAM 的设备了,过多的后台应用导致的,当然也有很多劣质的应用拖了 Android 的后腿。</p>    <p>        3. 编码处理,WP7和 Android 应用对应 xap 和 apk 虽然均为 zip 压缩,但 Android 在清单文件上做了二进制的编译达到了性能提升,而 wp7 仍然为 xml 原本的 xaml 文件,除了运行效率低下外,应用的安全性存在着很大的隐患。不过由于 WP7 软件开发较简单,一般如果不是游戏类应用或算法涉及不敏感的可以不用考虑代码混淆,毕竟 .Net 的门槛太低了。同时 Google Dalvik VM 这个 Java 虚拟机上的类库功能强大型,至少是目前 WP7.5 Silverlight4 的 20 倍还多在功能上。随着 WP7 功能的增加,可能 Java VM 比 .NET Runtime 效率更高。</p>    <p>        4. 由于 WP7 应用过多的依赖于 Silverlight,内部的 Uri 传递竟然使用字符串这样的形式,同时界面 .xaml 文件和 cs 或 vb 文件实现了 MVC,但在 Android 上我们通过 Intent 可以封装复杂的类型甚至是多维的字节数组,这也导致了代码混淆时 Java 依赖于 Package Name,而 WP7 依赖于绝对的路径,产生更复杂的情况。</p>    <p>        5. WP7 运行的高效其实得益于微软严格的限制,就是界面要十分简单,无法实现复杂的效果,如果 Android 运行同样的简单界面性能会不俗,而 Android 当 CPU 和 RAM 于 WP7 相同时,基本上以临界点 1GHz 的 A8 和 512MB 的 RAM 或更高来看,同样的处理量 Android 远比 WP7 高效,在 UI 部分 Silverlight 的 Bug 就更多了,内部的实现方面其实比 Android 更臃肿复杂,很多国内用户感觉 Android 体验差,主要是国产山寨机或低端机使用 ARM11 这样的 CPU,小于 512MB 的 RAM 还捆绑了一堆垃圾后台应用造成的。</p>    <p>        总之,微软今天仍然无视开发者体验,仅仅凭借 IDE 方面 VS2010 比 Eclipse 有优势,实在是太坑爹了,不苛求 Mac OS 版的 WP7 SDK,连 WinXP 都无法很好的兼容,微软的层层限制早晚会让开发者感觉这个系统不爽程度不亚于 iOS。</p>    <p align="center"><a target="_blank"><img alt="WP7应用运行效率之谜:流畅的代价很高" src="https://simg.open-open.com/show/1cd99423ae8fdd4368cb503806f74e59.jpg" width="550" height="467" /><br /> </a></p>    <div id="come_from">     来自:     <a id="link_source2" href="/misc/goto?guid=4958330380660165171" target="_blank">www.wpdever.com</a>    </div>    <p align="center"><a target="_blank"></a></p>