问题是这样的,我最近开发了一个WINCE平台上使用的程序,由于程序中要用到很多数据,目前我使用的是SQLCE的数据库来保存这些数据(记录数大概在10万条左右),但我发现一个问题,因为我需要经常访问这些数据从中查找一些符合要求的部分数据出来。这样访问的效果不是很理想,因为太过占用处理器资源和内存资源了(我每次读取数据库大概在100条数据左右),我将这部分数据读取到内存中然后保存到到一个datatable 中,再在datatble中进行一些相应操作,因为对这些datatable的操作相当频繁(多线程访问,每隔1-2秒就需要比较一次),所以影响了程序的执行效率,所以我的程序目前运行起来非常缓慢。现在的问题是,我想加快程序运行速度,从优化算法的角度考虑,我采取了很多措施,结果效果有限,并不能让我满意。在与我同类的软件中,有一部分软件他们也需要访问和我相同数据量的数据,但他们的处理速度却比我快很多(最少10倍),我不知道他们用的什么格式(或数据结构来存储这些数据),能够达到如此高的效率,和如此低的CPU占用。我希望各位能给我一些意见或建议,小弟感激不尽,微薄分数,不成敬意。

解决方案 »

  1.   

    datatable中放多少数据?都怎么操作datatable中的数据?
      

  2.   

    多线程和分页显示,在不使用的时候只在datatable中显示一定数量的明晰,待需要时在加载其他的
      

  3.   

    感谢各位的回帖,我的方法是,不定期从数据库查询获得以部分(100条记录)记录将其加载到内存中,然后再在内存中的datatable中操作这些数据(实际上我只需要其中的一条或几条记录),从中找到一条符合我要求的数据记录,然后再进行相应操作。但我发现瓶颈是在datatable中搜索查找符合我要求的数据上,这个部分代码我是写到一个线程中不停的比较核对的。这部分占用CPU非常严重。我想解决的问题是,有没有一种数据结构,能够不通过预读方式,直接从该数据结构中查找我需要的数据,(我目前是使用的是SQLCE移动数据库,从一个10万条记录的数据库中查询一条记录的时间大概要花掉4、5秒(智能设备的处理器400MHZ频率),因为是智能设备和电脑不能相提并论),这样就可以节约很多时间了。
    我想过使用其他的数据结构,但想不到有什么数据结果能够比SQLCE效率更高。或者请各位高手指点小弟一下,看常用的数据结构能够保存20万条数据记录,而且查询效率有很高的,常用的数据结构有那些,多谢各位的建议。谢谢。
      

  4.   

    SQLCE可以和普通数据库一样通过SQL语句访问,但是还提供了另外一种方式直接通过程序访问。因为SQLCE实际是对本地文件的操作,写SQL语句再解析执行是多此一举。
    具体的看下SqlCeCommand的SetRange方法和SqlCeReader的Seek方法
    http://msdn.microsoft.com/zh-cn/library/system.data.sqlserverce.sqlcecommand.setrange%28VS.80%29.aspx
      

  5.   


    瓶颈如果是在datatable查找上面,为什么还要从数据库下手呢?应该考虑优化datatable中搜索的算法啊?毕竟这部分是最频繁执行的。可以考虑将datatable按你需要搜索的内容建一个类似索引的数据结构