gpt4 book ai didi

ruby - 为什么 Ruby CSV 文件读取速度很慢?

转载 作者:数据小太阳 更新时间:2023-10-29 07:48:10 32 4
gpt4 key购买 nike

我有一个相当大的 CSV 文件,有 400 万条记录和 375 个字段,需要处理。我正在使用 RUBY CSV 库读取此文件,但速度非常慢。我认为 PHP CSV 文件处理速度很慢,但比较两次读取 PHP 的速度要快 100 倍以上。我不确定我是否在做一些愚蠢的事情,或者这只是 RUBY 没有针对此类批处理进行优化的现实。我设置了简单的测试 pgms 来获得 RUBY 和 PHP 的比较时间。我所做的只是读取,不写入,不构建大数组,并在处理 50,000 条记录后跳出 CSV 读取循环。还有其他人遇到过这种性能问题吗?

我在 MAC 上本地运行,内存为 4gig,运行 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,0,',','"')) {
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 版本。

关于ruby - 为什么 Ruby CSV 文件读取速度很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19040641/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com