为什么Ruby CSV文件读取速度很慢?
发布时间:2020-12-17 01:30:41 所属栏目:百科 来源:网络整理
导读:我有一个相当大的CSV文件,有4百万条记录和375个字段,需要处理. 我正在使用RUBY CSV库来读取此文件,但速度非常慢.我认为 PHP CSV文件处理速度很慢,但比较两次读取PHP的速度要快100倍.我不确定我是不是在做一些愚蠢的事情,或者这只是RUBY没有针对这种类型的批
我有一个相当大的CSV文件,有4百万条记录和375个字段,需要处理.
我正在使用RUBY CSV库来读取此文件,但速度非常慢.我认为 PHP CSV文件处理速度很慢,但比较两次读取PHP的速度要快100倍.我不确定我是不是在做一些愚蠢的事情,或者这只是RUBY没有针对这种类型的批处理进行优化的现实.我设置了简单的测试pgms来获得RUBY和PHP的比较时间.我所做的就是读取,不写入,不构建大型数组,并在处理50,000条记录后突破CSV读取循环.还有其他人遇到过这个性能问题吗? 我在运行4 GB内存的MAC上本地运行,运行OS X 10.6.8和Ruby 1.8.7. Ruby进程只需497秒即可读取50,000条记录,PHP进程在4秒内运行,这不是拼写错误,速度超过100倍.仅供参考 – 我在循环中有代码打印出数据值,以确保每个进程实际上正在读取文件并将数据带回来. 这是Ruby代码: require('time') require('csv') x=0 t1=Time.new CSV.foreach(pathfile) do |row| x += 1 if x > 50000 then break end end t2 = Time.new puts " Time to read the file was #{t2-t1} seconds" 这是PHP代码: $t1=time(); $fpiData = fopen($pathdile,'r') or die("can not open input file "); $seqno=0; while($inrec = fgetcsv($fpiData,','"')) { if ($seqno > 50000) break; $seqno++; } fclose($fpiData) or die("can not close input data file"); $t2=time(); $t3=$t2-$t1; echo "Start time is $t1 - end time is $t2 - Time to Process was " . $t3 . "n"; 解决方法
只需更新到当前版本的Ruby,您就可以获得巨大的速度提升.在版本1.9中,FasterCSV被集成为Ruby的标准CSV库.
查看Chruby以管理您的不同Ruby版本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |