我注意到我的Ruby(1.9)脚本中出现了一些极端的延迟,经过一番挖掘后,它归结为正则表达式匹配。我在Perl和Ruby中使用以下测试脚本:
Perl:
$fname=shift(@ARGV);
打开(文件“<;fname”);
而(<;文件>;){
如果(/(.*)\|*?发送请求。*?TID=(.*),/){
打印“$1:$2\n”;
}
}
Ruby:
f=File.open(ARGV.shift)
while(line=f.get)
如果/(.*)\|*?发送请求。*?TID=(.*),/.match(行)
放置“{$1}:{$2}”
终止
终止
我对两个脚本使用相同的输入,一个只有44290行的文件。
每一个的时间是:
Perl:
[email protected]:~/bin/local/project$time./try.pl input>/dev/null
实际0.049秒
用户0m0.040s
系统0m0.000s
Ruby:
[email protected]:~/bin/local/project$time./try.rb input>/dev/null
实1m5.106s
用户1m4.910s
sys 0m0.010s
我想我在做一些非常愚蠢的事情,有什么建议吗
多谢各位
regex=Regexp.new(/(.*)\|.*)发送请求。*?TID=(.*),/)
f=File.open(ARGV.shift)。每个do |行|
如果正则表达式匹配(行)
放置“{$1}:{$2}”
终止
终止
或
regex=Regexp.new(/(.*)\|.*)发送请求。*?TID=(.*),/)
f=文件.open(ARGV.shift)
f、 每条线都要做|
如果正则表达式匹配(行)
放置“{$1}:{$2}”
终止