麻烦大家帮我推荐一个算法(List View多数据的情况下如何提高性能)

来源:百度知道 编辑:UC知道 时间:2024/05/23 16:15:56
是这样的,我做了一个游戏修改器,基于Windows Mobile的。

首先,Windows Mobile内存有限,所以算法一定要高效,少占内存。

我的程序在系统中只有一个实例在运行。
当在游戏界面上按特定的快捷键后呼出主程序,挂起目标进程,并对内存进行查找,查找的结果显示在List View中。
我的程序支持同时对多个进程进行查找,多个进程的查找结果互不影响。
也就是说,你可以一边修改游戏1的内存,一边修改游戏2的内存。
理论上支持无限个进程的修改。

-----------------------------------------------------------------------
问题1:
程序中关于搜索到的结果只有一个List View用于显示(不可能有多个,因为我前面说了“理论上支持无限个进程的查找”,
我总不能查找一个进程就创建一个控件显示结果啊,这不太现实。),请问,如何组织数据,使多个进程的查找结果互不影响,最重要
的是效率的。

关于“问题1”我的实现思路。
内部维护一个进程ID表,表示已被查找过的进程,如果用户在某一游戏界面上按了快捷键,呼出主程序,则先查找进程ID表,如果
ID表中有这个进程的ID,则说明这个进程先前被查找过,那么则调用查找结果,显示在List View 中。如果没有,
则向进程ID表中插入新项。开始新的搜索。 这只是我的一个初步的思路,还有可圈可点之处,大家有什么好办法?

-----------------------------------------------------------------------

-----------------------------------------------------------------------
问题2:
这个是基于“问题1”的,一个进程可以支持多个搜索任务,比如,你可以对 游戏1 新建二个搜索任务,二个搜索任务同是搜索“游戏1”
的内存,但二个搜索任务的结果互不影响,,请问这个功能怎么实现好。。

我的观点是,进程PID的表是一个索引,然后每个具体的PID的数据是一个表项.
每次查询根据PID索引看是否存在,若不存在就添加,若存在,就显示.
每次显示,这个ViewList就是一个具体表的映射.
这个程序作为不在前台运行时,一直监听键盘,当收到击键消息时,被唤醒.
关于内存方面,可以将上面所提到的每个PID对应的表,做成一个"真表",作为文件存储,虽然这样读取时会有效率上的差别,但应该是在能接受范围内.
毕竟一个游戏可能占用空间比较大,其处于挂起状态时,可能将数据暂时转移到缓存中,也可能依然在内存中.
反正我觉得采取PID索引+文件缓存的方式比较好,这样,离理论上的"无限"个近一些.因为内存中占用的只是一个存储PID的索引表.

第二个问题,搜索的时候不改动数据不就可以了么?只读取内容,然后获取需要的内容填写到表中.结果之间不会相互影响吧~你可以给这个进程的多个线程之间分配好,按内存块大小分,线程1负责区间1,线程2负责区间2...这样结果再合起来应该就好了.
一般Mobile都是单CPU,对同一个任务用多线程意义不大,我觉得反而会浪费线程管理这部分资源.