首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

海量数据读入内存时的有关问题

2012-04-07 
海量数据读入内存时的问题我这里有2G左右的数据(10亿条记录),要进行大量复杂的统计计算。我采用的方法是一

海量数据读入内存时的问题
我这里有2G左右的数据(10亿条记录),要进行大量复杂的统计计算。我采用的方法是一次性尽可能多的将数据导入内存,减少磁盘的读写,否则计算时间将是不可忍受的:
1.采用VS2005的IDE
2.C++建立链表,每一个链表元素标识一个记录
3.将硬盘上的文件读入内存的链表中(方便内存中计算时数据的检索)
我的机器内存1.25G,但当我的程序运行时,内存分配到620M左右的时候,系统就报错(“tigger a breakpoint”)。看来我想把数据都导入内存计算是行不通了。我怀疑错误的原因是在堆上分配太多内存而又不释放(其实我在程序最后写了释放的,但是释放的前提是数据全部进入内存,且计算完毕,现在数据还没全进去就报错了)。
我想问的是:
1.我的内存显然还有余力去接纳更多的数据(1.25G),但是在620兆就报错是不是因为windows对于单个进程的堆资源有上限?
2.如果我采用多进程或多线程(一个进程负责分配堆内存,一个进程负责计算,再一个进程负责将完成计算的元素所占用的资源释放)效果会不会好一点呢?
谢谢各位!


[解决办法]
要不再买2条内存,增加到4G ?

要不然使用vs2008 的 c++ 编译器看看 

hehe 这个问题我不清楚
[解决办法]
我也没有做类似的任务,但是个人觉得设计好数据结构,可以部分载入,多几次IO操作应该是可以接受的。
[解决办法]
问题产生可能是你采用链表,导致频繁的申请内存,且各个小内存块并不连续,等于你的机器中都是内存碎片,以致再无较大的连续内存块可供申请。

可能的解决方法:采用内存池。
[解决办法]
你可以直接批量的取数据,比如一次取1M,用多线程进行计算
没必要考虑很复杂

热点排行
Bad Request.