我要处理很大的数组,内存放不下,需要使用磁盘文件作为辅助空间。大家觉得如何能提高访问效率?
Kusk 2006-07-22 07:50:25 首先要说明的是不考虑操作系统级别提供的虚拟内存等机制,我需要我的程序对这个过程进行控制。
以下谈谈我的想法:
使用文件作为辅助空间,我觉得很直观的想法是把数据按顺序放到文件中。对于数组的一些操作,分别考虑它们的效率。
首先,遍历是没有问题的。只要扫描文件的各个数据读出即可。无论是顺序还是随机遍历,都不是太大的问题。
其次,在数据末尾追加新项也不是问题,只要在文件的末尾添加即可。
再者,修改数据也不困难,首先定位,然后重写应该就可以了(假设数据是定长的)。
现在我的问题是插入和删除操作。似乎流式文件不能直接支持这样的操作。假如要插入数据,我目前想到的方法只能是把数据一部分一部分地读出并写入新的文件,到了插入点之后再插入新数据项,再继续把剩下的数据搬移。最后把旧文件删除,用新文件代替旧文件。
同样,删除操作也只能是搬移,遇到要删除的元素则跳过,再把剩下的搬过去……
因为可能要多次进行这样的操作,而且数据量非常大,又是在磁盘上的I/O,所以效率上接受不了。不得大家有什么经验或者想法可供参考?