在下编一程序,处理数据巨多,内存不够用。由于用户对处理速度要求比较苛刻,考虑的办法是:使用虚拟内存。
具体情况是这样,程序维护一系列Measurement类的对象,用一个叫MeasurementList的类来管理。程序可以放20个使用频率高的Measurement在内存里面,其余的写入虚拟内存。当用户使用的Measurement不在内存里时,则将该Measurement从虚拟内存中读入,再在MeasurementList中删除一个使用可能性最低的Measurement,如有修改则将其重新写入虚拟内存。
目前的主要问题是,如果将Measurement中分散于各段内存中的数据收集在一块连续的内存中,以便一次写入虚拟内存。这样做的好处是:对虚拟内存的读写比较快,从而加快程序的处理速度。
注意:Measurement里面的成员变量不是简单的原型数据,其成员变量有其他类的对象,有指针,还有序列(Array)等等。
现在的做法,就是对Measurement里面的成员一个个读写,一层层的往下读写。
不知VC里面是否有这样处理功能的类,或者,各位大虾有更好的处理办法,请不吝赐教!

解决方案 »

  1.   

    不是自作聪明的问题。我们做工程的,不是说突发奇想地想出某种问题,一般是有了问题,才想办法去解决的。
        用户在使用软件的时候,不停的增加数据,而程序不停的new出新的对象,只是在程序结束的时候,才将这些对象删除掉。难道用new申请的内存不是常驻的,难道操作系统会自动将某些数据写入虚拟内存么?据我观察,不是这样的。不然,我们的软件不会因为数据多,而出现内存异常。当然,我们的数据再多,也不会超过几百M,虚拟内存应该够使的。
        将数据写入文件,从文件中读写,将new出的对象及时删除,是一种办法,但是,这样做无法满足用户对速度的要求。一个几十M的ini文件,从里面找出一段来读写,其速度相对较慢。如果频繁读写,等待时间较长,用户不答应。没办法,给老外做东西,人家要求高,我们得尽量解决的完美一点。
        我提出这个问题,想请大家讨论,请高手指点。我们做程序的,如果不遇到挑战,不去接受挑战,恐怕难以进步。我们的创造性,也恐怕大多在于用较好的办法解决技术难题吧。
      

  2.   

    to broadoceans:怎么个利用操作系统得内存管理法,还请指教一二。
      

  3.   

    如果程序是正常new/delete是不会应为处理数据的多少而使操作系统无法处理的,当你new数据时,不会出现内存不够情况,系统会自动采用虚拟内存。可以尝试写一段代码不停new大量数据而不释放,最后你将会听到硬盘不停的转动,其实他在写盘:)至于采用虚拟内存和文件操作,我并不觉得差别很大(都是硬盘操作吗)。如果想人为管理对象,可以参考使用持久COM对象。