LoginSignup
0
0

More than 3 years have passed since last update.

ファイルを一行ずつ読み込むVS一気に読み込む

Last updated at Posted at 2020-10-08

ファイルの読み込みをするときに一気に読み込むのではなく1行ずつ読み込んだ方がメモリ的にいいとのこと
それが本当がどうかの実験をしてみようかと思います。

読み込み対象となるテキストは以下のものです。

test.txt
john    m   19
micheal m   28
abbie   f   31
dabid   m   17
claire  f   26

まず、一気に読み込んでみる

以下のコードでやってみる

require 'objspace'

start_time = Time.new

puts File.read("test.txt")

end_time = Time.new

puts end_time - start_time
puts "#{ObjectSpace.memsize_of_all * 0.001 * 0.001} MB"

読み込む部分をとても短く書きました。
そして、結果は

$ ruby all_read.rb
john    m   19
micheal m   28
abbie   f   31
dabid   m   17
claire  f   26
4.9e-05
2.951902 MB

次に1行ずつ読んでみる

以下のコードでやってみる

require 'objspace'

start_time = Time.new

File.open("test.txt") do |text|
  text.each_line do |line|
     puts line
   end
end

end_time = Time.new

puts end_time - start_time
puts "#{ObjectSpace.memsize_of_all * 0.001 * 0.001} MB"

一気に読み込むのと対照的に少し行数が増えました。
そして、結果は

$ ruby each_read.rb
john    m   19
micheal m   28
abbie   f   31
dabid   m   17
claire  f   26
0.000112
2.9598400000000002 MB

数回同じ操作をしたのですが、
行数が少ないと一気に読み込んだほうがメモリの使用量が少ないのかな?と思います。

では、もっと長いテキストでやってみたらどうなるかを考えます。

もっと長いテキストで考えてみる

test.txt
john    m   19
micheal m   28
abbie   f   31
dabid   m   17
claire  f   26
(中略)
john    m   19
micheal m   28
abbie   f   31
dabid   m   17
claire  f   26 

と、とりあえず同じ行を増やしただけなのですが、
1000行,5000行,10000行で考えてみたいとおもます。

1000行のテキストの読み込み

それぞれ5回測ってみました。

1 2 3 4 5
一気に読み込む 2.965176 MB 2.963405 MB 2.965656 MB 2.965656 MB 2.965656 MB
一行ずつ読む 3.002243 MB 3.000736 MB 2.999688 MB 2.999808 MB 3.002083 MB

5000行のテキストの読み込み

1 2 3 4 5
一気に読み込む 3.010936 MB 3.011384 MB 3.009285 MB 3.008709 MB 3.008349 MB
一行ずつ読む 2.542326 MB 2.542286 MB 2.542246 MB 2.542286 MB 2.54435 MB

10000行のテキストの読み込み

1 2 3 4 5
一気に読み込む 3.065925 MB 3.065341 MB 3.065173 MB 3.068216 MB 3.067936 MB
一行ずつ読む 2.403886 MB 2.404046 MB 2.404534 MB 2.404366 MB 2.403886 MB

結論

明らかになりました。
行が増えるにつれて、
「一気に読み込む」が増えるのに対して、逆に「1行ずつ読み込む」が減っている。
多く読み込むのであれば「1行ずつ読み込む」方が良い。

けど、処理の時間的に「一気に読み込む」方が短かったです。それはそうか。

参考文献

http://simplesandsamples.com/readlines.rb.html
https://techacademy.jp/magazine/7797
https://blog.freedom-man.com/measure-ruby-memory-usage

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0