Tôi nhận thấy một số sự chậm trễ nghiêm trọng trong các kịch bản Ruby (1.9) của tôi và sau khi một số đào nó đun sôi xuống để phù hợp với biểu thức chính quy. Tôi đang sử dụng các kịch bản thử nghiệm sau đây trong Perl và Ruby:Biểu thức chính quy - Ruby vs Perl
Perl:
$fname = shift(@ARGV);
open(FILE, "<$fname");
while (<FILE>) {
if (/(.*?) \|.*?SENDING REQUEST.*?TID=(.*?),/) {
print "$1: $2\n";
}
}
Ruby:
f = File.open(ARGV.shift)
while (line = f.gets)
if /(.*?) \|.*?SENDING REQUEST.*?TID=(.*?),/.match(line)
puts "#{$1}: #{$2}"
end
end
tôi sử dụng các đầu vào tương tự cho cả hai kịch bản, một chỉ với 44290 dòng. Thời gian cho mỗi người là:
Perl:
[email protected]:~/bin/local/project$ time ./try.pl input >/dev/null
real 0m0.049s
user 0m0.040s
sys 0m0.000s
Ruby:
[email protected]:~/bin/local/project$ time ./try.rb input >/dev/null
real 1m5.106s
user 1m4.910s
sys 0m0.010s
Tôi đoán tôi đang làm một cái gì đó hết sức ngu ngốc, bất cứ đề nghị?
Cảm ơn bạn
Bạn đã thử 'nếu dòng = ~ /(.*) \ |?.?.?. * GỬI YÊU CẦU * TID = (*), /'? Điều đó cũng làm việc trong Ruby, tôi sẽ tò mò nếu nó có đặc điểm hiệu suất khác nhau. –