CE6会比CE5快吗?

昨天去研华听了一场微软嵌入式多媒体讲座。其实我对讲座本身倒不太在意,我是冲着CE6的评估版光盘去,拿到光盘后不久就撤了,呵呵。虽然可以从网上直接 下载,但是放在硬盘里还是很占地方的,自己刻光盘也嫌麻烦。到的时候晚了几分钟,好在讲座也没正式开始,微软的哥们正在向不辞劳苦跋山涉水提前赶到的同志 们喷CE6和CE5的区别。
说到区别,CE6引入的新的虚拟内存模型是不能不提的。有人就问了一个问题,说CE5中所有进程共享一份虚拟空间,在CE6中每个进程有自己单独的虚拟空 间,会不会导致性能的下降?这显然是一个CE的开发者都很关心的问题,不过微软这哥们看来没好好研究过CE的系统内核机制,回答得不得要领,只是含糊的说 从测试结果看CE6和CE5的性能看起来差不多。
这个问题其实不难回答。所有进程共享一份虚拟空间和每个进程有自己的虚拟空间,这里面有什么区别?主要的区别也就是CE5中一个进程可以直接访问另一个进 程的内存,而CE6中不可以(得用ReadProcessMemory之类API)。所以看起来在CE6在内存访问方面确实是慢了,但问题的关键在于,哪 些情况下一个进程会直接去访问另一个进程的内存?一般场合下,应用程序是不会也不应该直接访问其他进程内存的,如果需要进程间通信,应该用file mapping之类的标准技术。在CE5中,只有一类情况是比较特殊的,可能会需要对其他进程的直接内存访问,那就是设备驱动程序(用 MapCallerPtr或MapPtrToProcess)。这又涉及到CE6的另一处改进。在CE6中,设备驱动程序现在可以挪到kernel进程 中。这对性能意味着什么?在进程间内存访问上,驱动程序得用memory marshalling技术来替代原先的直接访问,这确实比原来慢了。但是在内核进程运行的代码在API调用方面性能提高了-对NK.EXE的API和原 先通过PSL(Protected Server Libraries)实现的API(filesys.exe, gwes.exe, device.exe)都可以直接调用(因为都在kernel进程里)。正负两方面的影响互相抵消,使得设备驱动程序在性能上可能和原先差不多(当然实际 情况还得看具体的程序)。但是从另外一方面来看,设备驱动程序移入内核进程对应用程序的性能提升是有很大好处的。因为原先通过PSL技术实现的API(如 BitBlt等GDI函数),由于每次调用process context都需要切换到server process context(如gwes.exe),开销还是很大的,当年Windows NT就因为类似的原因把GDI模块移入了内核中。
在CE5 下开发经常让我有一种回到了WIN16时代的错觉。可以直接访问其他进程的内存简直是一种诱惑,我的WinCE Remote Process Explorer里很多地方就这么干了,移植到CE6,这个问题是最麻烦的。CE6则在很多方面和XP越来越像。虽然我还没有用过CE6,但我相信总体来 说CE6的性能应该是会比CE5快的。

你可能感兴趣的:(c)