首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
专题开发/技术/项目
搜索引擎技术
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
海量数据读入内存时的问题
[已结贴,结贴人:xuhongxin8477]
加为好友
发送私信
在线聊天
xuhongxin8477
等级:
可用分等级:
贫农
总技术分:
51
总技术分排名:
124126
揭贴率:
100.00%
发表于:
2008-08-19 20:06:29
楼主
我这里有2G左右的数据(10亿条记录),要进行大量复杂的统计计算。我采用的方法是一次性尽可能多的将数据导入内存,减少磁盘的读写,否则计算时间将是不可忍受的:
1.采用VS2005的IDE
2.C++建立链表,每一个链表元素标识一个记录
3.将硬盘上的文件读入内存的链表中(方便内存中计算时数据的检索)
我的机器内存1.25G,但当我的程序运行时,内存分配到620M左右的时候,系统就报错(“tigger a breakpoint”)。看来我想把数据都导入内存计算是行不通了。我怀疑错误的原因是在堆上分配太多内存而又不释放(其实我在程序最后写了释放的,但是释放的前提是数据全部进入内存,且计算完毕,现在数据还没全进去就报错了)。
我想问的是:
1.我的内存显然还有余力去接纳更多的数据(1.25G),但是在620兆就报错是不是因为windows对于单个进程的堆资源有上限?
2.如果我采用多进程或多线程(一个进程负责分配堆内存,一个进程负责计算,再一个进程负责将完成计算的元素所占用的资源释放)效果会不会好一点呢?
谢谢各位!
问题点数:
20
回复次数:
5
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lixiaobai
张冬
等级:
可用分等级:
中农
总技术分:
285
总技术分排名:
47757
发表于:
2008-08-19 23:21:33
1
楼 得分:
5
要不再买2条内存,增加到4G ?
要不然使用vs2008 的 c++ 编译器看看
hehe 这个问题我不清楚
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
linyai
等级:
可用分等级:
长工
总技术分:
10
总技术分排名:
213082
发表于:
2008-08-23 03:41:42
2
楼 得分:
5
我也没有做类似的任务,但是个人觉得设计好数据结构,可以部分载入,多几次IO操作应该是可以接受的。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
imageproc
等级:
可用分等级:
贫农
总技术分:
5
总技术分排名:
247828
发表于:
2008-08-27 15:50:09
3
楼 得分:
5
问题产生可能是你采用链表,导致频繁的申请内存,且各个小内存块并不连续,等于你的机器中都是内存碎片,以致再无较大的连续内存块可供申请。
可能的解决方法:采用内存池。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
zoucongjie
等级:
可用分等级:
贫农
总技术分:
23
总技术分排名:
169349
发表于:
2008-08-27 17:08:39
4
楼 得分:
5
你可以直接批量的取数据,比如一次取1M,用多线程进行计算
没必要考虑很复杂
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
kj270
等级:
可用分等级:
短工
总技术分:
0
总技术分排名:
313963
发表于:
2008-09-11 17:26:44
5
楼 得分:
0
使用Windows的文件映射功
能,看看怎么样
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友