Created
November 17, 2010 04:43
-
-
Save phiggins/702980 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class File | |
def self.buffer(path) | |
n = 0 | |
size = File.size( path ) | |
chunk = 2**16 | |
File.open(path, "rb") do |f| | |
while n < size | |
n += chunk | |
yield f.sysread( chunk ) | |
end | |
end | |
end | |
end | |
file = ARGV[0] | |
2.times do | |
lines, bytes = 0,0 | |
start = Time.now | |
File.buffer(file) do |buf| | |
lines += buf.count("\n") | |
bytes += buf.size | |
end | |
elapsed = Time.now-start | |
mb = bytes.to_f / 2**20 | |
puts "File.buffer read %d lines & %0.1fMB in %0.3fs (%d lines/sec, %0.1fMB/sec)" % [ | |
lines, mb, elapsed, lines/elapsed, mb/elapsed | |
] | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
phiggins@lihnucks /tmp/file_read_test $ ruby run_all.rb | |
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux] | |
read.rb | |
40k.txt | |
File.open(...) read 40000 lines & 1.9MB in 0.122s (326818 lines/sec, 15.4MB/sec) | |
File.open(...) read 40000 lines & 1.9MB in 0.105s (380246 lines/sec, 18.0MB/sec) | |
blob.txt | |
File.open(...) read 245561 lines & 10.1MB in 0.947s (259344 lines/sec, 10.6MB/sec) | |
File.open(...) read 245561 lines & 10.1MB in 0.599s (410069 lines/sec, 16.8MB/sec) | |
foreach.rb | |
40k.txt | |
File.foreach read 40000 lines & 1.9MB in 0.043s (939507 lines/sec, 45.2MB/sec) | |
File.foreach read 40000 lines & 1.9MB in 0.043s (933382 lines/sec, 45.0MB/sec) | |
blob.txt | |
File.foreach read 245561 lines & 10.3MB in 0.248s (991769 lines/sec, 41.6MB/sec) | |
File.foreach read 245561 lines & 10.3MB in 0.242s (1013937 lines/sec, 42.5MB/sec) | |
readlines.rb | |
40k.txt | |
File.open(...,'rb').readlines read 40000 lines & 1.9MB in 0.039s (1021022 lines/sec, 49.2MB/sec) | |
File.open(...,'rb').readlines read 40000 lines & 1.9MB in 0.042s (954558 lines/sec, 46.0MB/sec) | |
blob.txt | |
File.open(...,'rb').readlines read 245561 lines & 10.3MB in 0.217s (1129296 lines/sec, 47.4MB/sec) | |
File.open(...,'rb').readlines read 245561 lines & 10.3MB in 0.225s (1091649 lines/sec, 45.8MB/sec) | |
buffered_read.rb | |
40k.txt | |
File.buffer read 40000 lines & 1.9MB in 0.007s (5763625 lines/sec, 277.6MB/sec) | |
File.buffer read 40000 lines & 1.9MB in 0.006s (6223594 lines/sec, 299.8MB/sec) | |
blob.txt | |
File.buffer read 245561 lines & 10.3MB in 0.034s (7300908 lines/sec, 306.4MB/sec) | |
File.buffer read 245561 lines & 10.3MB in 0.032s (7707560 lines/sec, 323.4MB/sec) | |
readrb.rb | |
40k.txt | |
File.open(...,'rb') read 40000 lines & 1.9MB in 0.087s (458927 lines/sec, 21.7MB/sec) | |
File.open(...,'rb') read 40000 lines & 1.9MB in 0.086s (464021 lines/sec, 21.9MB/sec) | |
blob.txt | |
File.open(...,'rb') read 245561 lines & 10.1MB in 0.508s (483755 lines/sec, 19.8MB/sec) | |
File.open(...,'rb') read 245561 lines & 10.1MB in 0.494s (496913 lines/sec, 20.4MB/sec) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
file = ARGV[0] | |
2.times do | |
lines, bytes = 0,0 | |
start = Time.now | |
File.open(file, "rb").readlines.each do |line| | |
lines += 1 | |
bytes += line.size | |
end | |
elapsed = Time.now-start | |
mb = bytes.to_f / 2**20 | |
puts "File.open(...,'rb').readlines read %d lines & %0.1fMB in %0.3fs (%d lines/sec, %0.1fMB/sec)" % [ | |
lines, mb, elapsed, lines/elapsed, mb/elapsed | |
] | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
tests = Dir["*.rb"] - [$0] | |
system("ruby -v") | |
tests.each do |test| | |
puts "\n#{test}" | |
Dir["*.txt"].each do |file| | |
puts file | |
system( "ruby #{test} #{file}" ) | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
C:\file_read_test>ruby run_all.rb | |
ruby 1.9.1p429 (2010-07-02 revision 28523) [i386-mingw32] | |
buffered_read.rb | |
40k.txt | |
File.buffer read 40000 lines & 1.9MB in 0.016s (2560000 lines/sec, 123.3MB/sec) | |
File.buffer read 40000 lines & 1.9MB in 0.031s (1280000 lines/sec, 61.6MB/sec) | |
blob.txt | |
File.buffer read 245561 lines & 10.3MB in 0.109s (2245129 lines/sec, 94.2MB/sec) | |
File.buffer read 245561 lines & 10.3MB in 0.109s (2245129 lines/sec, 94.2MB/sec) | |
foreach.rb | |
40k.txt | |
File.foreach read 40000 lines & 1.9MB in 0.672s (59534 lines/sec, 2.9MB/sec) | |
File.foreach read 40000 lines & 1.9MB in 0.672s (59534 lines/sec, 2.9MB/sec) | |
blob.txt | |
File.foreach read 245561 lines & 10.3MB in 3.500s (70160 lines/sec, 2.9MB/sec) | |
File.foreach read 245561 lines & 10.3MB in 3.484s (70474 lines/sec, 3.0MB/sec) | |
read.rb | |
40k.txt | |
File.open(...) read 40000 lines & 1.9MB in 2.156s (18550 lines/sec, 0.9MB/sec) | |
File.open(...) read 40000 lines & 1.9MB in 2.141s (18686 lines/sec, 0.9MB/sec) | |
blob.txt | |
File.open(...) read 245559 lines & 10.1MB in 41.797s (5875 lines/sec, 0.2MB/sec) | |
File.open(...) read 245559 lines & 10.1MB in 42.375s (5794 lines/sec, 0.2MB/sec) | |
readlines.rb | |
40k.txt | |
File.open(...,'rb').readlines read 40000 lines & 1.9MB in 0.062s (640000 lines/s ec, 30.8MB/sec) | |
File.open(...,'rb').readlines read 40000 lines & 1.9MB in 0.094s (426666 lines/s ec, 20.5MB/sec) | |
blob.txt | |
File.open(...,'rb').readlines read 245561 lines & 10.3MB in 0.375s (654829 lines /sec, 27.5MB/sec) | |
File.open(...,'rb').readlines read 245561 lines & 10.3MB in 0.609s (402971 lines /sec, 16.9MB/sec) | |
readrb.rb | |
40k.txt | |
File.open(...,'rb') read 40000 lines & 1.9MB in 0.109s (365714 lines/sec, 17.3MB /sec) | |
File.open(...,'rb') read 40000 lines & 1.9MB in 0.109s (365714 lines/sec, 17.3MB /sec) | |
blob.txt | |
File.open(...,'rb') read 245561 lines & 10.1MB in 0.672s (365486 lines/sec, 15.0 MB/sec) | |
File.open(...,'rb') read 245561 lines & 10.1MB in 0.656s (374188 lines/sec, 15.3 MB/sec) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment