Beim Lesen einer Datei ist es in Bezug auf den Speicher besser, Zeile für Zeile zu lesen, als alles auf einmal zu lesen. Ich würde gerne experimentieren, um zu sehen, ob das stimmt.
Der zu lesende Text lautet wie folgt.
test.txt
john m 19
micheal m 28
abbie f 31
dabid m 17
claire f 26
Versuchen Sie es mit dem folgenden Code
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"
Ich habe den zu lesenden Teil sehr kurz geschrieben. Und das Ergebnis ist
$ 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
Versuchen Sie es mit dem folgenden Code
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"
Die Anzahl der Zeilen hat im Gegensatz zum sofortigen Lesen etwas zugenommen. Und das Ergebnis ist
$ ruby each_read.rb
john m 19
micheal m 28
abbie f 31
dabid m 17
claire f 26
0.000112
2.9598400000000002 MB
Ich habe die gleiche Operation mehrmals durchgeführt, Wenn die Anzahl der Zeilen gering ist, verbraucht sie weniger Speicher, wenn sie gleichzeitig gelesen wird? Ich denke.
Lassen Sie uns nun darüber nachdenken, was passieren würde, wenn wir es mit einem längeren Text versuchen würden.
test.txt
john m 19
micheal m 28
abbie f 31
dabid m 17
claire f 26
(Weggelassen) john m 19 micheal m 28 abbie f 31 dabid m 17 claire f 26
Ich habe vorerst nur die gleiche Zeile hinzugefügt, Ich möchte über 1000 Zeilen, 5000 Zeilen und 10000 Zeilen nachdenken.
Ich habe jeweils 5 mal gemessen.
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
Sofort lesen | 2.965176 MB | 2.963405 MB | 2.965656 MB | 2.965656 MB | 2.965656 MB |
Zeile für Zeile lesen | 3.002243 MB | 3.000736 MB | 2.999688 MB | 2.999808 MB | 3.002083 MB |
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
Sofort lesen | 3.010936 MB | 3.011384 MB | 3.009285 MB | 3.008709 MB | 3.008349 MB |
Zeile für Zeile lesen | 2.542326 MB | 2.542286 MB | 2.542246 MB | 2.542286 MB | 2.54435 MB |
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
Sofort lesen | 3.065925 MB | 3.065341 MB | 3.065173 MB | 3.068216 MB | 3.067936 MB |
Zeile für Zeile lesen | 2.403886 MB | 2.404046 MB | 2.404534 MB | 2.404366 MB | 2.403886 MB |
Es wurde klar. Wenn die Anzahl der Zeilen zunimmt Während "sofort lesen" zugenommen hat, hat "zeilenweise lesen" abgenommen. Wenn Sie viel lesen möchten, ist es besser, "eine Zeile nach der anderen zu lesen".
In Bezug auf die Verarbeitungszeit war es jedoch kürzer, "sofort zu lesen". Ist das so?
http://simplesandsamples.com/readlines.rb.html https://techacademy.jp/magazine/7797 https://blog.freedom-man.com/measure-ruby-memory-usage
Recommended Posts