社区
C++ 语言
帖子详情
现有300万行的日志文件,每读1万行约用时0.6秒,现想加快读取速度,怎么改进呢?
shdiao
2006-09-14 11:16:00
我用 ifstream 的 getline 函数按行读入,每读入1万行集中处理一次,感觉读入数据用的时间太长,用什么方案能加快读取速度呢? 方案?函数?
日志的情况:
以行为基本单位,每行结尾一个 '\n' 字符
每行长度不定,短的 30 个字节,长的 600 个字节, 平均每行 70 到 100 个字节左右
...全文
992
28
打赏
收藏
现有300万行的日志文件,每读1万行约用时0.6秒,现想加快读取速度,怎么改进呢?
我用 ifstream 的 getline 函数按行读入,每读入1万行集中处理一次,感觉读入数据用的时间太长,用什么方案能加快读取速度呢? 方案?函数? 日志的情况: 以行为基本单位,每行结尾一个 '\n' 字符 每行长度不定,短的 30 个字节,长的 600 个字节, 平均每行 70 到 100 个字节左右
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
hdoj 1020 encoding
Encoding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 28368 Accepted Submission(s): 12567 Problem Description Given a string conta
【HDOJ】1020 Encoding
【题目】http://acm.hdu.edu.cn/showproblem.php?pid=1020 【报告】 题意,是对字符串进行压缩,对字符串中连续字符变成数字+字符,比如BB变成2B,CCC变成3C。 没什么特别需要注意的,暴力就过了。 【程序】 // Task: 1020 Encoding // Designer: Rsky 2013/08/12 #...
hdoj1020 Encoding
思路很简单。但始终想不明白自己第一次写的代码哪里有问题。 先贴第一次的代码。#include #include #include using namespace std; int main() { int t,i; string str; cin>>t; int abc[26]={0};getchar(); while(t--) { memset(abc,0,sizeof(
HDOJ 1020 Encoding
HDACM 1020 import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); whil
hdoj 1020 Encoding
EncodingTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 52209 Accepted Submission(s): 23212Problem DescriptionGiven a string containing only ...
C++ 语言
65,213
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章