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
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
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.
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.
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 |
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 |
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 |
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?
http://simplesandsamples.com/readlines.rb.html https://techacademy.jp/magazine/7797 https://blog.freedom-man.com/measure-ruby-memory-usage
Recommended Posts