现有300万行的日志文件,每读1万行约用时0.6秒,现想加快读取速度,怎么改进呢?

shdiao 2006-09-14 11:16:00
我用 ifstream 的 getline 函数按行读入,每读入1万行集中处理一次,感觉读入数据用的时间太长,用什么方案能加快读取速度呢? 方案?函数?

日志的情况:
以行为基本单位,每行结尾一个 '\n' 字符
每行长度不定,短的 30 个字节,长的 600 个字节, 平均每行 70 到 100 个字节左右
...全文
945 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
突击召唤师 2006-09-19
  • 打赏
  • 举报
回复
第一反应就是file-mapping :) 别读过了
shdiao 2006-09-19
  • 打赏
  • 举报
回复
问题解决了,感谢各位回贴的朋友!!
最后用的 file-mapping ,效果比较理想 :)
:)
MaxXu0905 2006-09-18
  • 打赏
  • 举报
回复
对文件映射,文件的大小有个最大值的。
Macor 2006-09-18
  • 打赏
  • 举报
回复
file-mapping
记下~~
piggy33 2006-09-16
  • 打赏
  • 举报
回复
300万行。` 昏了`` 我编一两年了好像也没编到过那么多吧`
厉害。支持一下!
Wolf0403 2006-09-16
  • 打赏
  • 举报
回复
自然要计算最后一块的长度的。。。
shdiao 2006-09-16
  • 打赏
  • 举报
回复
楼上看错了 :)
300万行是 日志,不是程序 :)
kangji 2006-09-16
  • 打赏
  • 举报
回复
楼主最终找到了解决方法
liu584 2006-09-16
  • 打赏
  • 举报
回复
写了300W行代码的人就像
一个乞丐说“都我乞讨了一辈子了”
一样无聊
lddLinan 2006-09-16
  • 打赏
  • 举报
回复
娃哈哈哈~
shdiao 2006-09-15
  • 打赏
  • 举报
回复
我是用 ifstream.getline() 函数读的,读一万行,存在一个 char 的大数组中
但是感觉使用ifstream.getline()函数,IO 次数太多,影响速度
现在既想减少IO次数,又想保证以行为基本单位
shdiao 2006-09-15
  • 打赏
  • 举报
回复
感谢各位回帖指教

尝试使用了 内存映射文件 file-mapping ,速度提升了一个数量级

不过出现了一个新的小问题,映射到文件结尾时,总是出现映射出错,如何控制不映射到文件外面呢?
elssann 2006-09-15
  • 打赏
  • 举报
回复
内存映射文件啊.
du51 2006-09-15
  • 打赏
  • 举报
回复
我觉得能不能用istreambuf试试.减少很多不必要的测试.
jixingzhong 2006-09-15
  • 打赏
  • 举报
回复
楼主你可以从另外的方面考虑,
比如你的文件处理所做的工作,
必须是每个记录进行处理么?

是否可以设计一些算法(比如利用索引),
去掉一些不必要的 I/O 操作...
jixingzhong 2006-09-15
  • 打赏
  • 举报
回复
外部读取,
是没有办法滴 ...

你可以通过加大一次性读取的数量,
减少读取的次数,
但是,
一般来讲,
这个数量有一个最佳值,
太大了反而不好 ...
Jiessie 2006-09-15
  • 打赏
  • 举报
回复
io,file-mapping 会很慢,因为cache 系统不会一次给你读这么多出来。
Jiessie 2006-09-15
  • 打赏
  • 举报
回复
分配10M的memory,
然后一次读10M(20M或30M也行),直接处理这10M,不要按你的1万行为单位。这应该是最好的方案了。
OOPhaisky 2006-09-15
  • 打赏
  • 举报
回复
支持一下。
sinall 2006-09-15
  • 打赏
  • 举报
回复
支持楼上各位,瓶颈在io,file-mapping办法值得一试。
加载更多回复(8)

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧