在PPC上面用.NET CF开发应用需要注意些什么——(一)CPU、OS以及CLR差别简述

VS.NET 2003里面附带一个.NET Compact Framework,简称.NET CF,可以用于PPC/WinCE上面的应用开发。怎么用.NET CF进行开发不是这个系列的内容,其实用.NET CF开发和普通的.NET 开发区别不是很大,因此对于用.NET进行开发的人来说,并不会有什么入门的难度,如何入门的文章在MSDN上面就可以搜到。着一个系列主要的内容是,在开发.NET CF的应用的时候,我们需要在什么地方明确注意和.NET Framework不一样的地方。并且这里有一个前提,我说的是在PPC下面的情况,虽然一般来说TabletPC上面的情况也差不多,但是由于我没有这方面的硬件,所以无法保证在TabletPC上面的情况是否完全一样。

首先,让我们来看看硬件方面的情况。.NET CF支持的芯片包括MIPS、Arm、SH等等,目前在PPC上面使用的主流芯片是Intel的XScale PXA2xx(属于StrongArm类型)。实际上是哪一种芯片对于整个开发并不重要,因为.NET CF的底层有对应的执行引擎,所以一次编译的应用程序在所有的芯片上面都能够执行。关于硬件方面,我们需要注意的是性能的问题。目前市面上能够看到的XScale ,主要都是PXA系列的,我们一般能够看到的是PXA250/255/263三个版本。250版本的总线比较低,只有100MHz,后两者是比较新的版本,总线有200MHz,以及拥有节电技术,因此后两者的速度比250要快一些并且更省电。255和263之间的速度区别不大,主要是263在集成了32Mbit Flash之后面积减小至原来的25%。还有一些其它的版本,例如263的低端版本260,更新的芯片版本270,以及非常旧的型号SA 1110等等,这些芯片在现在的市场来说都很不常见,所以也没有打算介绍。
PXA250/255/263里面的数字并不是他们的主频,这三个版本的芯片都有三种不同的主频,200/300/400MHz,一般市场上面比较常见的都是300/400这两种。在PPC上面,主频并不是一切,甚至不是决定运算性能的主要方面。事实上250从硬件上说并不比255慢多少,一般也只有在看电影这类对带宽需求比较大的情况下才会体现出差别来。什么才是主要的呢?系统的整体架构,这个是最主要的。其次则是运行OS的版本,再次是芯片的版本类型。有时候你会看到,两个OS以及芯片完全相同的两台PPC,性能完全可以相差一倍,例如华硕机子的性能就非常的出色。如果同样是华硕的机子,运行PPC2003也会比PPC2002要快——系统内核经过优化以后,某些例如显示相关的计算以及线程调度能力得到了提高,间接的为你的程序节省了一些不必要的时间。最后,你才会感觉到255和250的区别。当然,好像没有在250上面跑PPC2003的,但是有在255上面跑PPC2002的。同样的255,进行过升级到2003之后,你就会觉得速度有了明显的提高。但是你如果对比同样是PPC2002的250和255,就不能够感受出明显的区别来。

那么我们现在如果要进行.NET开发,性能上应该参照什么运行平台呢?我觉得至少应该参照PXA255-400MHz、PPC2003(with .NET CF 1.0 SP2)的平台。这个参照平台会不会太超前呢?不会,目前就有一些低端的产品使用这样的平台,例如Mio336,只是主频稍微低一点——300MHz,但是速度比400MHz的339还要快。而在半年之后,主流的产品至少都会是这个配置,甚至会有更加快速的平台出现,而你的开发到销售的时间估计也会接近半年。

说了半天,也许大家对于这个硬件的性能是什么样的没有一个感性的认识,可以说目前的性能接近于PII200MHz的性能。不过这个也只是我的估计,我主要是看在320*240的分辨率下面播放MPeg4电影的流畅程度(每秒15帧)得出这样的结论的,并且个人觉得有点保守。但是大家不要过于开心,因为我们讨论的是在.NET CF下开发,而不是eVC下面开发。

那么OS方面呢?和PC上面不一样,PPC的OS情况比较单纯,主流的基本上是PPC2002/2003,也有一些比较另类的回用WinCE.NET 4.2。PPC2002本身不带.NET CF,因此需要安装.NET CF,尽管都是要安装,但是显然一个2M多一点的安装包不会给用户带来明显的麻烦。相比较之下,在PC上面要安装众多的补丁,最后在安装一个20M的.NET Framework——其实你想安装的程序可能本身只有300KB。但是并不是说在PPC2002上面就没有头痛的问题发生,至少我们会遇到一个最头痛的问题:如果自己做一个安装程序(不是VS.NET帮你做的那个CAB文件),这个安装程序就得要用eVC来写。如果我们想保证PPC2003也要能够用这个安装程序安装的话,我们还需要编译出两个版本。PPC2003则完全没有这些问题,内嵌了.NET CF——但是是SP1还是SP2还是原始版本就不一定了。WinCE.NET 4.2也应该内嵌了.NET CF,只是附带的PocketWord/PocketExcel只有查看能力,没有边际能力,其余的应该和PPC2003一样。当然,没有见过这类的样机,更加没有经过实际的测试,不太清楚应该使用PPC项目还是TabletPC项目。不过用WinCE.NET 4.2这个OS的机子非常少,实际的开发基本上可以忽略这一类的用户,除非你的项目就是要让成本非常的低——相对于二十几美金的PPC2003授权,WinCE.NET 4.2的四美金授权显得非常的低。说到这里,也许大家会关心操作系统的授权问题。实际上这些授权并不发生在软件供应商身上,而是在硬件供应商身上,但是无论如何,操作系统的授权费用的高低都会直接影响到最终硬件的成本。从软件角度看,我们的参照平台应该是:PXA250-400、PPC2003(with Original version of .NET CF)。为什么不要考虑SP1/SP2呢?因为即使是PPC2003,你仍然不能够保证某台机器上面烧制的是什么版本,因此你需要为最终用户提供一个补丁安装包。而补丁安装包在机器掉电之后会消失,需要重新安装。虽然说你的程序也会掉电,但是如何判断是否需要打补丁这个问题会让你的部署变得复杂起来,也许并不会复杂多少,但是没必要在这个方面自找麻烦。那么不提供补丁行不行?不行,因为某些代码在SPx上面不会出问题,但是没有SPx就会表现不一致甚至出异常。

最后,我说一下CLR方面的区别.NET CF是以.NET Framework为原形,在很多地方进行了大量的删节,甚至是重新编写的,这些地方需要我们认真注意。因为在设计阶段,我们也许以为在.NET下面能够做到,但是到了实际的编码阶段,我们才发现.NET CF没有提供这样的能力——删掉了,如果非要那样做就会比较复杂。在.NET CF里面的删节分为三种,一种是完全不提供(例如加密解密的部分,完全没有了),另外一种是功能简化(例如Brush,不仅仅去掉了所有花哨的Brush只保留了SolidBrush,而且即使是SolidBrush都没有“宽度”这个属性),还有几种是重载的简化——不仅仅是函数重载数量的删节,甚至一些原来可以通过多种途径达到目的的操作,现在也仅仅保留一到两种途径(这个类型的简化太多了,几乎到处都是)。而重新编写的部分更是让人感到恐怖,因为一些原来的高级功能,在这里根本就不知道如何施展。这个主要发生在CLR执行引擎/支撑体系、以及System.Windows.Form这个类库上面,前者对于我们来说是透明的,而后者则不是这么一回事。比如说以前我们可以通过重写WinProc达到截获消息的目的。现在则变成是内部的、无法重载的。再比如说,以前我们如果有什么特别的需求,还是可以通过获取Image的hDC,然后经过传统的GDI进行特殊处理。现在则根本找不到hDC(其实还是可以通过一些Undocument的途径获得),甚至一些直接创建的Image根本就没有hDC!所以即使你知道BMP的格式,你也没有办法保存Image到文件当中,因为你没有办法获得Scanline(图象上面每个点的值)。所以说,如果你打算用.NET CF开发PPC应用的话,我建议大家把.NET CF当作一个全新的,与.NET不同的框架看待——虽然实际上绝大多数的地方都是一样的,甚至.NET CF的程序可以直接在PC上面跑(不需要模拟器),但是这么做还是有很大的好处的。在用.NET CF开发商业产品之前,我建议大家先做两件事情:
1、大致浏览一下整个MSDN帮助,注意哪一些是.NET CF支持的,哪些是不支持的。支持的都会有.NET Compact Frame 1.0支持这样的字眼,没有写的就是不支持。
2、现写一个简化的版本试试看,熟悉一下各方面的问题,包括一些.NET CF不支持的地方也许就会在这个尝试当中暴露出来。

当大家开始进行代码编写的时候,需要注意一些什么呢:
1、留意整个系统的开销情况。PPC毕竟不是PC,目前的主流产品也就是64MB一共,最多留给用户的空间是53MB,并且还要作为内存和“硬盘”分享,很可能实际上给你的程序仅仅15MB左右的空间,所以不要随意的去花费内存。
2、测试你的代码。和上面那一条的理由一样,PPC的性能也不能和PC相比,你需要想象一下在PII-400上面运行.NET的程序会是什么滋味。有一些代码的访问需要进行调整,需要知道什么样的代码运行起来效率更高。

了解了这些PPC上面的基本情况,下一次将开始说说我认为的.NET CF程序设计指引。

posted on 2004-04-24 11:28 Sumtec 阅读(3193) 评论(6)   编辑  收藏 引用 网摘 所属分类: .NET CF


评论

Good~好文啊`   回复   更多评论
  

#  re: 在PPC上面用 .NET CF开发应用需要注意些什么——(一)CPU、OS以及CLR差别简述 2004-04-24 20:37 dumbo
不过俺觉得最郁闷的是从eVB/eVC转过来后,PDA上的数据库处理十分之麻烦......因为 .NETCF下不支持CDB访问!俺有十几个应用都用了cdb,真正是郁闷到要撞墙......,已经试过几个CEDB访问的类,都多多少少有点问题!唉!   回复   更多评论
  

#  re: 在PPC上面用 .NET CF开发应用需要注意些什么——(一)CPU、OS以及CLR差别简述 2004-04-26 11:45 sumtec
嗯,这个问题确实是一个问题。不过我估计很可能到了Whidbey之后,这些问题都会有一定程度的缓解,因为:
1、Whidbey里面的VC++直接支持开发SmartDevice,也就是相当于eVC的升级版本被做到VC++ .NET里面去了。并且和VC++ .NET开发PC程序一样,可以开发非托管的,也可以托管的,甚至可以混合……不过很可能要等到2005Q3了。

2、Whidbey里面的 .NET CF升级到v 2.0,声称支持COM+访问,过去很多COM的东西应该可以用了。   回复   更多评论
  

#  re: 在PPC上面用 .NET CF开发应用需要注意些什么——(一)CPU、OS以及CLR差别简述 2004-11-24 10:56 请教
请教
http://community.csdn .net/Expert/topic/3577/3577515.xml?temp=.9767267   回复   更多评论
  

#  re: 在PPC上面用 .NET CF开发应用需要注意些什么——(一)CPU、OS以及CLR差别简述 2005-07-22 20:06 hudan
mark   回复   更多评论
  

#  re: 在PPC上面用 .NET CF开发应用需要注意些什么——(一)CPU、OS以及CLR差别简述 2005-11-09 17:45 zhang
本人用C#开发的PPC程序不能运行。开始的时候可以运行,过了一段时间后就不能运行了。PPC上 CF都安装了,郁闷。。。。。。。。。。。。。   回复   更多评论
http://www.cnblogs.com/sumtec/archive/2004/11/24/7451.html
#  re: 在PPC上面用 .NET CF开发应用需要注意些什么——(一)CPU、OS以及CLR差别简述 2004-04-24 20:30 hBifTs

你可能感兴趣的:(.net,image,OS,平台,产品,华硕)