Feature #3228
closedspeedup File.read
Description
=begin
Appears from http://www.ruby-forum.com/topic/209005
that File.read could be sped up by first requesting the file's size, then reading that much.
File.read('a', File.size('a')) # faster than just File.read('a') by about 15% in Linux/Windows
in windows, it also speeds up ascii reading dramatically, which was unexpected, but nice.
Cheers!
-rp
=end
Updated by Eregon (Benoit Daloze) over 14 years ago
=begin
2010/4/30 Roger Pack redmine@ruby-lang.org
Bug #3228: speedup File.read
http://redmine.ruby-lang.org/issues/show/3228Author: Roger Pack
Status: Open, Priority: Normal
ruby -v: ruby 1.9.2dev (2010-05-01 trunk 27570) [i686-linux]Appears from http://www.ruby-forum.com/topic/209005
that File.read could be sped up by first requesting the file's size, then reading that much.File.read('a', File.size('a')) # faster than just File.read('a') by about 15% in Linux/Windows
in windows, it also speeds up ascii reading dramatically, which was unexpected, but nice.
Cheers!
-rp
Hi,
From my tests on ruby-trunk( ruby 1.9.2dev (2010-04-23 trunk 27451)
[x86_64-darwin10.3.0], so OSX and maybe irrelevant? ),
I get significant improvement (2-3 times faster), but result is different.
In fact, the former use UTF-8 encoding, and the latter use
ASCII-8BIT(so BINARY).
If you force binary with:
File.read file, mode: 'rb', I - most of the time - get the same results.
So the source of the problem (at least on my system), is the fact
File.read(f) will use UTF-8, even when the file is binary (I used
7-zip and database).
On pure ASCII text file, it's about 30% faster.
Regards,
B.D.
=end
Updated by mame (Yusuke Endoh) over 14 years ago
- Status changed from Open to Rejected
=begin
Hi,
When you specify byte size to File#read, it reads file in binary
mode. IOW, File.read('a', File.size('a')) is identical to
File.binread('a').
In general, when IO methods handles byte size, they performs in
binary mode. As I recall, akr told me this fact.
--
Yusuke Endoh mame@tsg.ne.jp
=end