梦书之家(移动开发)

你有一个苹果,我有一个苹果,我们交换一下,一人还是一个苹果;你有一个思想,我有一个思想,我们交换一下,一人就有两个思想。 ——肖伯纳

导航

在基于Windows Mobile应用程序中存储管理的最佳策略[翻译]

起源: 前几天编了个小程序,要将一个文本文件放到数组中,虽然都读进去了,但是后来运行出错无法搜索文件的后面部分,弄了半天才发现原来是运行的时候内存不足,故把数组都改为动态申请,后面就 OK了. 于是,不得不考虑内存的使用以及运行效率的问题.前几天在微软的MSDN上看到Windows Mobile SDK的更新文档(即使我在8月初期就看到了微软MSDN上的更新,当时只是看到了一些),发现了以下的文章,把他翻译成中文:
(翻译不对的地方,还请多多指教)

Best Practices for Managing Storage in a Windows Mobile-based Application

    存储硬件和整体的系统设计对存储的性能影响很大.目前,Pocket PC设备使用基于RAM的文件系统,而Smartphone设备使用基于闪存(falsh)的永久存储文件系统.想对存储硬件技术有更深的理解,可以看:
System Memory Management in Windows CE .NET

存储硬件性能考虑

    下表是基于闪存(Flash)的永久存储文件系统与基于RAM的文件系统的各种操作性能的相关比较:

操作 基于Flash 基于RAM
   局部读 较慢 较快
  局部写 很慢 较快
  网络(Network)读 较快 较慢
  网络写 较快 较慢
  是否有备份电池硬件
  永久注册表? 比基于RAM更优越

存储软件性能的最佳策略

    遵循以下的最佳策略能够帮助您最小化任何的性能影响, 为此您的应用程序必须:

  • (1) 最小化应用程序的大小,即应用程序要尽可能的小
  • (2) 最小化永久存储数据的数量。 由于文件系统的资源可能是有限的,所以必须确保您的应用程序能够容忍并不总是运行的存储系统。
  • (3) 最小化更新数据的频率。不要经常更换数据。
  • (4) 最小化任何对注册表的周期性的写。不要经常对注册表进行写操作。
  • (5) 最小化动态链接数据库(DLLs)的数量。如果不是经常调用,动态加载库比静态加载库更为优越,但要记住的一点是当你使用完动态链接库后,记得要卸载,释放动态链接库。
  • (6) 最小化循环检测。使用事件驱动设计,能够使您的应用程序检测到所需要的任何变化,而不是使用while循环语句来检测。  
       运行少量的代码。代码在ROM中是压缩存储的,因此在代码能够运行之前,代码必须先解压。而对代码进行解压影响性能。比如:在一个典型的Smartphone开发平台,解压一页的代码需要3毫秒(ms)。另外,代码执行要消耗电源,除非绝对需要(必须),尽量不运行代码。
  • (7) 只在合适的时候运行代码。例如:当应用程序对用户来说不可见的时候,停止它的活动。
  • (8) 最小化对闪寸硬件的读写。在一个典型的Smartphone开发平台,往闪存硬件中写一页的代码需要83毫秒(ms)的时间。用尽可能地往RAM中写数据,来取代往闪存里写(注:由上一部分的表格可知,往RAM中进行局部写要比往闪存中写快)。如果对闪存的写是不可避免的,那么应该尽可能地推迟写的时间。对闪存的写比对RAM的写要花费更多的电量,因此尽可能地减少对闪存的写以达到减少电量消耗的目的。
  • (9) 尽可能地把驱动程序标记为可调页的(Pageable)。只要驱动程序在挂起或恢复的期间不运行,并且驱动程序没有在维护页错误(缺页?),我们就可以把驱动程序标记为可调页的。RAM包含所有可调页的驱动程序和DLL文件。在启动的时候,所有的不可调页的驱动程序和DLL文件必须被解压进RAM。(注:而上文中说到解压需要时间的)

    原文:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mobilesdk5/html/moconbestpracticesformanagingstorageinwindowsmobileapplication.asp

posted on 2005-09-28 10:01  梦书  阅读(1018)  评论(0编辑  收藏  举报