社区
C语言 帖子详情 一个程序需要读取几十万次文件,如何提高读文件效率 绿茶盖儿 2014-09-25 10:26:52 现在有一个程序,执行期间大概需要读取几十万次(少的时候一、二十万,多的时候一百万)文件,每次读取不同的文件,每个文件也不是很大,大的几百KB,小的就几KB,我就用普通的fopen,然后fread, 发现程序执行的比较慢,有什么办法能让程序执行的更快呢?内存映射我也试过,效率好像并没有什么改善。
...全文
2458 32 打赏 收藏 一个程序需要读取几十万次文件,如何提高读文件效率 现在有一个程序,执行期间大概需要读取几十万次(少的时候一、二十万,多的时候一百万)文件,每次读取不同的文件,每个文件也不是很大,大的几百KB,小的就几KB,我就用普通的fopen,然后fread, 发现程序执行的比较慢,有什么办法能让程序执行的更快呢?内存映射我也试过,效率好像并没有什么改善。 复制链接
扫一扫 分享 转发到动态 举报 AI 作业
写回复 配置赞助广告取 消
确 定
用AI写文章 32 条回复 切换为时间正序 请发表友善的回复… 发表回复 打赏红包 需支付: 0.00 元 取 消 确 定 BeanJoy 2014-10-11 打赏举报 回复 引用 27 楼 qin_lin_sb 的回复:[quote=引用 3 楼 BeanJoy 的回复:]
所有要读的文件只读取一次,然后把内容保存到内存中,下一次再需要读取的时候,直接从内存中取,不要每次都去读文件。
要知道,进行I/O操作,对于程序中进行的其他操作来说,可以算得上是相当耗时的操作。每次都是读不同的文件,而且只读一次就行了,不存在下次再读的问题[/quote]
意思是有一百多万个文件?这规模实在是很了不起。
从硬件方面来说,换好的硬盘,提高打开关闭读取的效率;
从软件方面来说,把多个文件合并成一个文件,打开关闭一次即可获取到多个文件的内容,减少打开关闭文件的次数。 palm_m 2014-10-09 打赏举报 回复 使用ramDisk CrackValue 2014-10-08 打赏举报 回复 如果只是打开,读取的话,可以考虑把所有文件合并成一个大文件,前面自己加上文件数,文件名,文件开始和结束地址。
对于这个大文件,可以使用内存映射文件
前提是不写入,写入的话(改变文件长度的写入),就惨了,嘿嘿 JamesChen 2014-10-08 打赏举报 回复 异步IO 处理的同时做读取 考虑磁盘阵列 边城的刀声 2014-10-08 打赏举报 回复 楼主这个场景貌似用hadoop比较合适吧,分布存储再计算,map-reduce 赵4老师 2014-09-26 打赏举报 回复 再来句“废话”:(我这最多的就是“废话”)
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
我纯洁全身都纯洁 2014-09-26 打赏举报 回复 为何不用数据库 莫_问 2014-09-26 打赏举报 回复 文件存储格式不修改,没法加速;因为读写文件次数就在没法减少,代码再怎么写,磁盘io都降不来。 莫_问 2014-09-26 打赏举报 回复 引用 4 楼 zhao4zhong1 的回复:在文件大小相同的前提下:
读刚读过的文件比头次读没读过的文件快
读转速快的硬盘上的文件比读转速慢的硬盘上的文件快
读没有磁盘碎片的文件比读有磁盘碎片的文件快
读文件不处理比边读边处理快
单线程从头到尾一次读文件比多线程分别读文件各部分快(非固态硬盘上)
读固态硬盘上的文件比读普通硬盘上的文件快
这不全是废话啊?就这条还有点也用:“读刚读过的文件比头次读没读过的文件快” LouisScola 2014-09-26 打赏举报 回复 你这种读写有些像CPU哎,CPU读写RAM也像这种,可以看看CPU的cashe机制? xionggch 2014-09-26 打赏举报 回复 读取几十万次(少的时候一、二十万,多的时候一百万)文件,每次读取不同的文件,每个文件也不是很大,大的几百KB,小的就几KB,
这个数据量比较大,能说说你的操作算法及所需时间 FancyMouse 2014-09-26 打赏举报 回复 最省钱的办法是买个ssd 小灰狼 2014-09-26 打赏举报 回复 把数据保存到数据库里,索引什么的数据库系统会帮你搞定 绿茶盖儿 2014-09-26 打赏举报 回复 引用 3 楼 BeanJoy 的回复:所有要读的文件只读取一次,然后把内容保存到内存中,下一次再需要读取的时候,直接从内存中取,不要每次都去读文件。
要知道,进行I/O操作,对于程序中进行的其他操作来说,可以算得上是相当耗时的操作。每次都是读不同的文件,而且只读一次就行了,不存在下次再读的问题 绿茶盖儿 2014-09-26 打赏举报 回复 引用 11 楼 cheng7068 的回复:多线程内存写入处理应该会提升一些效率吧,我觉得还是要从算法优化上下工夫算法并不复杂,只是读个文件,获取里面的一些数据,做一些简单运算,运算量也不大,还是IO操作过多导致程序执行很慢 绿茶盖儿 2014-09-26 打赏举报 回复 引用 5 楼 zmlovelx 的回复:就不能把需要的数据都整合到一个文件中?不能啊,所有文件都是独立存在的 houzhenghui123 2014-09-26 打赏举报 回复 1.把几万个文件生成一个临时文件
2.对这个临时文件做上面所说的处理。
你会发现,大量的程序执行都浪费在打开和关闭文件了。
之前写过类似的东西,效率基本上可以提高百倍以上 707wk 2014-09-25 打赏举报 回复 引用 4 楼 zhao4zhong1 的回复:在文件大小相同的前提下:
读刚读过的文件比头次读没读过的文件快
读转速快的硬盘上的文件比读转速慢的硬盘上的文件快
读没有磁盘碎片的文件比读有磁盘碎片的文件快
读文件不处理比边读边处理快
单线程从头到尾一次读文件比多线程分别读文件各部分快(非固态硬盘上)
读固态硬盘上的文件比读普通硬盘上的文件快+1 神-气 2014-09-25 打赏举报 回复 内存映射用于大文件才有比较明显的速度优势,对于这样的零散的小文件,肯定没什么效果。
这种小文件,用什么都没戏,和5楼说的,你为什么不把它们合在一起? 赵4老师 2014-09-25 打赏举报 回复 您是否希望迅速对您频繁使用的文件进行碎片整理?使用 Contig 优化单个的文件,或者创建连续的新文件。http://technet.microsoft.com/zh-cn/sysinternals/bb897428
加载更多回复(12) java 读取文件 效率_Java 逐行读取文本文件的几种方式以及效率对比 前言上周负责的模块中需要逐行读取文件内容, 写完之后对程序执行效率不太满意, 索性上网查了一下 Java 逐行读取文件内容的各种方法, 并且简单地比对了一下执行效率. 在此记录, 希望能够帮到有需要的人.注意: 本文比对的项目为 逐行读取文本内容, 并不能代表其他方式的文件读取效率优劣!!!文末有完整代码.先放结果1000000 行文本读取结果比对:BufferedReader 耗时: 49msS... Java读取文件内容方法比较 最近在做一个语料的清洗程序,需要读取大量的txt文件的内容,然后对内容进行一系列的清洗,这时有两种处理方案,一是用readline()一行一行读取然后拼接起来,二是一次性读取,我倾向于一次性将文本的原始内容直接读取到内存中再做处理,因为涉及的文件量很大,几十、几百G的几十万个文件,这样提升一点速度,整体就能提升很大的速度。当然,这需要你有一台大内存的机器,内存不够者……可以一次读取少部分内容,分多... 如何提高读取Excel的效率,NPOI多线程读取详解 在此示例中,我们手动将单元格范围分成多个块,每个块包含1000行,然后使用嵌套循环逐个读取单元格,并在每个单元格上执行必要的操作。在读取Excel数据时, 不要逐行读取, 而是使用单元格范围. 这种方式可以减少对Excel文件的读取次数, 从而提高读取效率.使用多线程可以在读取Excel文件时提高效率. 例如, 可以使用一个线程读取Excel文件, 另一个线程处理数据.以上是一些改善读取Excel效率的建议. 根据Excel文件的大小和数据结构, 可以选择不同的方法来提高读取效率. java并发读取相同的文件_高效读取大文件,再也不用担心 OOM 了! 最近阿粉接到一个需求,需要从文件读取数据,然后经过业务处理之后存储到数据库中。这个需求,说实话不是很难,阿粉很快完成了第一个版本。内存读取第一个版本,阿粉采用内存读取的方式,所有的数据首先读读取到内存中,程序代码如下:Stopwatchstopwatch=Stopwatch.createStarted();//将全部行数读取的内存中Listlines=FileUtils.readLi... java多线程读取多个文件 导入数据库 近期在做java读文件的项目,由于数据量较大,因此研究了一下多线程,总结了一下:一. 多个线程读文件和单个线程读文件,效率差不多,甚至可能不如单线程,原因如下:如果只是单纯的读文件,一个线程足够了,因为一般瓶颈是在磁盘io上,多个线程只会在磁盘io上阻塞。因为不同文件的读写,会造成磁头的频繁转换,磁头的频繁转换要比读取磁盘的时间更长。但是一般是读一小块做一次处理,然后再读下一块,这样只用一个线程磁盘
C语言
70,022
社区成员
243,263
社区内容
发帖 与我相关 我的任务 C语言 C语言相关问题讨论 复制链接
扫一扫 分享 确定 社区描述 C语言相关问题讨论 社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告 试试用AI创作助手写篇文章吧
+ 用AI写文章