首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 海量数据读入内存时的问题 [已结贴,结贴人:xuhongxin8477]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xuhongxin8477
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于: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  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lixiaobai
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 23:21:331楼 得分:5
    要不再买2条内存,增加到4G ? 

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

    hehe  这个问题我不清楚
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • linyai
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 03:41:422楼 得分:5
    我也没有做类似的任务,但是个人觉得设计好数据结构,可以部分载入,多几次IO操作应该是可以接受的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • imageproc
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-27 15:50:093楼 得分:5
    问题产生可能是你采用链表,导致频繁的申请内存,且各个小内存块并不连续,等于你的机器中都是内存碎片,以致再无较大的连续内存块可供申请。

    可能的解决方法:采用内存池。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zoucongjie
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-27 17:08:394楼 得分:5
    你可以直接批量的取数据,比如一次取1M,用多线程进行计算
    没必要考虑很复杂
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kj270
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-11 17:26:445楼 得分:0
    使用Windows的文件映射功能,看看怎么样
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved