免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1693 | 回复: 7
打印 上一主题 下一主题

紧急!处理500M的文本文件,如何使运行速度更快? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-16 16:52 |只看该作者 |倒序浏览
我的处理办法是一次读入50M的内容给char *buf,总共读入10次。这个时间需要1分30秒。如果再加上查找buf中的匹配字符将会循环中套循环,时间更慢。perl实现所有的功能需要2分50秒。C可以比这更快吗?c有没有其它方法处理这么大的文件呢?

以下是原代码:

#include <stdio.h>;

main(int argc,char *argv[] )
{ int i=0;
  FILE *fp;
  char *buf[10];

  if((fp=fopen("d:\\perl\\test.txt","rb")==NULL)
  {
    printf("Cannot open file";
    exit(1);
  }

  for(i=0;i<10;i++)
  {
   buf=malloc(52428800);
   fseek(fp,0L+i*52428800,SEEK_SET);
    fread(buf,52428800,1,fp);

    free(buf);
  }

  fclose(fp);
}

论坛徽章:
0
2 [报告]
发表于 2004-06-16 17:30 |只看该作者

紧急!处理500M的文本文件,如何使运行速度更快?

你的机器太破了。扔了吧。c当然比perl快了。

你应当按照页面大小去读会更快,如4k,另外也用不着每次都申请内存,然后释放。

顺便问一下,你为什么没有选择开辟500M的Buffer呢?奇怪呀。

论坛徽章:
0
3 [报告]
发表于 2004-06-16 17:35 |只看该作者

紧急!处理500M的文本文件,如何使运行速度更快?

读写会涉及到系统相关的一些操作。

匹配字符串有更好的算法。可参考boost中的regex。

论坛徽章:
0
4 [报告]
发表于 2004-06-16 17:44 |只看该作者

紧急!处理500M的文本文件,如何使运行速度更快?

如果能一下读入500M就好了,内存才多大呀?实践证明不能读入500M,VC报错!
boost是什么东西呀?

论坛徽章:
0
5 [报告]
发表于 2004-06-16 17:56 |只看该作者

紧急!处理500M的文本文件,如何使运行速度更快?

我会使用内存映射

论坛徽章:
0
6 [报告]
发表于 2004-06-16 18:30 |只看该作者

紧急!处理500M的文本文件,如何使运行速度更快?

can you explain why you need this?

论坛徽章:
0
7 [报告]
发表于 2004-06-16 19:22 |只看该作者

紧急!处理500M的文本文件,如何使运行速度更快?

方便啊,缓存分配之类的问题统统由系统完成,难道你认为自己写的代码性能比操作系统的代码性能还要高?当然,机器配置不能太弱了,我也经常操作几百M的话单文件,没有任何问题

论坛徽章:
0
8 [报告]
发表于 2004-06-17 13:12 |只看该作者

紧急!处理500M的文本文件,如何使运行速度更快?

用mmap
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP