Skip to content

Instantly share code, notes, and snippets.

@glurp
Created May 7, 2014 17:17
Show Gist options
  • Select an option

  • Save glurp/9217b45e3def78c218b3 to your computer and use it in GitHub Desktop.

Select an option

Save glurp/9217b45e3def78c218b3 to your computer and use it in GitHub Desktop.
bench reading text file
require_relative 'utils'
filename="x.txt"
content=<<EEND
=============== First line
aaaaaaaaaaaa
bbbbbbbbbbbb
111111111111
Aéàèû
--------------- Fin
EEND
content=content*1024
def echo(e) end
puts "Create file a big file"
File.open(filename,"w") { |f| 1000.times { f.print(content) } }
puts "File size=#{File.size(filename)/1024} KB"
puts "Read file line by line"
chrono(" while gets ") { File.open(filename) { |f| while line=f.gets ; echo line.chomp; end } }
chrono(" f.each_line ") { File.open(filename) { |f| f.each_line {|line| echo line } } }
chrono(" File.foreach") { File.foreach(filename) {|line| echo line } }
chrono(" IO.foreach ") { IO.foreach(filename) { |line| echo line } }
chrono(" File.readlines ") { File.readlines(filename).each { |line| echo line } }
chrono(" File.read.split") { File.read(filename).split(/\r?\n/).each { |line| echo line } }
chrono(" File.readlines ") { File.readlines(filename).each { |line| echo line } }
chrono(" File.read.split") { File.read(filename).split(/\r?\n/).each { |line| echo line } }
puts "Create file a little file"
content=content[0..16000]
File.open(filename,"w") { |f| f.print(content) }
puts "File size=#{File.size(filename)/1024.0} KB"
puts "Read file line by line"
chrono(" while gets ",100) { File.open(filename) { |f| while line=f.gets ; echo line.chomp; end } }
chrono(" f.each_line ",100) { File.open(filename) { |f| f.each_line {|line| echo line } } }
chrono(" File.foreach",100) { File.foreach(filename) {|line| echo line } }
chrono(" IO.foreach ",100) { IO.foreach(filename) { |line| echo line } }
chrono(" File.readlines ",100) { File.readlines(filename).each { |line| echo line } }
chrono(" File.read.split",100) { File.read(filename).split(/\r?\n/).each { |line| echo line } }
p "d"
File.delete(filename)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment