Ruby(2.0)为什么StringIO比使用文件慢

时间:2018-09-29 08:22:40

标签: ruby stringio popen3

我需要捕获外部进程的二进制输出。输出变得相当大,约为GB。

此刻,我以以下方式使用Open3.popen3

cmd = 'rtrace -args > file.out'
lines = [some, array, of, floats].pack('F*')
Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
  stdin.puts lines.pack("F*")
  stdin.close
  puts wait_thr.value
end

File.open('file.out', 'rb') do |f|
  # parsing binary file
end

为了使我的代码更快,我尝试避免再次写入和读取文件。这是工作代码

stdout, status = Open3.capture2(cmd, :stdin_data => lines.pack("F*"), :binmode=>true)
rad_output = StringIO.new(stdout)
puts status
rad_output.binmode
# Parse rad_output as before

我注意到我的代码慢了大约30%。我猜这是因为我正在创建一个新的String对象,但是由于我一直在内存中,所以希望有更好的性能。

这是预期的吗?我在做错什么吗?

0 个答案:

没有答案