[RUBY] Lire les fichiers ligne par ligne VS lire à la fois

Lors de la lecture d'un fichier, il est préférable en termes de mémoire de lire ligne par ligne plutôt que de lire en une seule fois. Je voudrais expérimenter pour voir si cela est vrai.

Le texte à lire est le suivant.

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

Tout d'abord, essayez de lire à la fois

Essayez-le avec le code suivant

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"

J'ai écrit la partie à lire très brièvement. Et le résultat est

$ 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

Puis lisez ligne par ligne

Essayez-le avec le code suivant

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"

Le nombre de lignes a légèrement augmenté contrairement à la lecture à la fois. Et le résultat est

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

J'ai fait la même opération plusieurs fois, Si le nombre de lignes est petit, utilise-t-il moins de mémoire s'il est lu en une seule fois? Je pense.

Pensons maintenant à ce qui se passerait si nous l'essayions avec un texte plus long.

Pensez à un texte plus long

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

(Omis) john m 19 micheal m 28 abbie f 31 dabid m 17 claire f 26

Je viens d'ajouter la même ligne pour le moment, Je voudrais penser à 1000 lignes, 5000 lignes et 10000 lignes.

Lire 1000 lignes de texte

J'ai mesuré chaque 5 fois.

1 2 3 4 5
Lire tout de suite 2.965176 MB 2.963405 MB 2.965656 MB 2.965656 MB 2.965656 MB
Lire ligne par ligne 3.002243 MB 3.000736 MB 2.999688 MB 2.999808 MB 3.002083 MB

Lire 5000 lignes de texte

1 2 3 4 5
Lire tout de suite 3.010936 MB 3.011384 MB 3.009285 MB 3.008709 MB 3.008349 MB
Lire ligne par ligne 2.542326 MB 2.542286 MB 2.542246 MB 2.542286 MB 2.54435 MB

Lire 10000 lignes de texte

1 2 3 4 5
Lire tout de suite 3.065925 MB 3.065341 MB 3.065173 MB 3.068216 MB 3.067936 MB
Lire ligne par ligne 2.403886 MB 2.404046 MB 2.404534 MB 2.404366 MB 2.403886 MB

Conclusion

C'est devenu clair. À mesure que le nombre de lignes augmente Alors que "lecture immédiate" a augmenté, "lecture ligne par ligne" a diminué. Si vous voulez lire beaucoup, mieux vaut "lire une ligne à la fois".

Cependant, il était plus court à "lire immédiatement" en termes de temps de traitement. Est-ce vrai?

Les références

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

Recommended Posts

Lire les fichiers ligne par ligne VS lire à la fois
Pourquoi insérer un saut de ligne à la fin du fichier
Lire le fichier sous WEB-INF lors de l'exécution du servlet
[Java] Lire les fichiers dans src / main / resources
[Java] Informations entières des caractères du fichier texte acquises par la méthode read ()
Jetez un coup d'œil à Gradle et lisez le build.gradle généré par Spring Initializr
Lire la capture de paquets obtenue par tcpdump avec Java
Traitement d'image: structure de base de l'image lue par le programme