AppleSeeker's Tech Blog
Welcome to AppleSeeker's space

昨天听黎波讲了关于SQL Server Compact 性能调校课程中,主要分析了SQL Server Compact如何优化。

主要分为,在数据访问层上与表、sql语言上的一些优化。这里就不再罗嗦一遍了。

SQL Server Compact优化,只是WM开发中需要优化的一部分。如何选择好不同的技术,在实际项目中来根据具体情况再分步优化,不断的改善程序的性能,才是我们所必须要关注的。

目前WM应用领域已相当广泛了,从最初的物流系统到现在的吃饭点菜,从工业领域到目前的个人家用都涉及到了。正所谓不同的领域有所需的不同要求。

我们就从WM客户端开始,一一讲述吧。

客户端上,由于使用C/S程序,从性能上来讲多数取决于设备及.net cf的版本。
另外P/Invoke的调用也相当耗费性能。我们需注意的地方就是在P/Invoke 的内部有一个LoadLibrary/FreeLibrary 对。
在调用API之前,先Load该DLL,然后再调用其API。完全用完后Free它,可以加速性能。
作为企业或公司级的应用来说,已基本没有任何问题。(毕竟界面较简单,基本都是添/删/改/查)
但是作为个人应用,比如像一些短信拦截,电话屏蔽之类的。 .net cf往往力不从心,需要调用大量的API。
另外3D类也特别不好,就象摆设一样,还是以2D图片来代替更好些。
界面上的控件建议不要太多。可以将图片之类的放入到资源文件中,这样比直接在外部访问更快些。
用using,来创建-释放对象。

在WM设备上使用SQL Server Compact,注意,该版本数据库,就是文件型数据库。用ado.net访问时,要注意一些优化。
1.用DataReader代替DataAdapter。
2.SqlCeResultSet可以非常方便的来回访问。
3.用TableDirect方式比直接用Select更快些,但只能访问单表。
4.表最好做一下索引,便于提高sql速度。
5.个人觉得能用List<T>就用,不建议用DataSet之类,消耗性能。

SQL Server Compact同步问题。微软曾推出ADO.net Sync Service for device。虽然功能很强大。但一旦数据量大的情况,同步时间较慢,且需要相对稳定的网络环境,不适宜。
根据适当情况,如果类似于定单,则可以下完定单后,立刻调用Web Service通知服务器。
对于商品库存表之类不采用Sync同步,在于,一旦客户端较多时,每个客户端的该表都与主表不一致时,就有冲突。1对1的同步没有任何问题。多对1的同步就无法很好的解决。

Socket连接,设置好Socket的超时时间,不要设置太长,太长还是会失败。

个人建议可以采用如下方法:来针对实时要求不高的情况
在本地数据保存到SQL Server Compact中, 隔一个时间间隔后, 再调用Web Service批量进行更新.

在通信时,无论打开Wifi还是GPRS,记得打开后,如果不用了,要关闭。每隔一段时间,进行一次GC的回收。虽然你的程序很稳定,但如果占用很多内存导致其它程序运行不倡,反过来也会影响你的程序。由于内存非常宝贵,因此避免制作数据副本很重要。而最为重要的是,代码只应在需要数据时才创建它,并且在完成工作时丢弃它。

总结:
.NET Compact Framework 对于内存管理、事件处理、面向对象的编程、用户输入、国际化和文件 I/O 很擅长,而面临最大挑战的领域是图形、窗口管理和资源管理。

以上是我对于WM的一些经验总结。希望和大家分享~

Author:AppleSeeker(冯峰)
Date:2009-02-20

文章导读:移动开发索引贴

posted on 2009-02-20 14:50  AppleSeeker(冯峰)  阅读(4306)  评论(13编辑  收藏  举报