Project

General

Profile

Actions

Feature #3228

closed

speedup File.read

Added by rogerdpack (Roger Pack) over 14 years ago. Updated over 13 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-core:29906]

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


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #1332: Reading file on Windows is 500x slower then with previous Ruby versionClosedakr (Akira Tanaka)03/30/2009Actions
Actions #1

Updated by Eregon (Benoit Daloze) over 14 years ago

=begin
2010/4/30 Roger Pack

Bug #3228: speedup File.read
http://redmine.ruby-lang.org/issues/show/3228

Author: 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

Actions #2

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
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0