[RUBY] Dateien zeilenweise lesen VS sofort lesen

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 zunächst, sofort zu lesen

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

Dann lesen Sie Zeile für Zeile

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.

Denken Sie in einem längeren Text

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.

Lesen Sie 1000 Textzeilen

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

Lesen Sie 5000 Textzeilen

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

Lesen Sie 10000 Textzeilen

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

Fazit

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?

Verweise

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

Recommended Posts

Dateien zeilenweise lesen VS sofort lesen
Warum einen Zeilenumbruch am Ende der Datei einfügen?
Lesen Sie die Datei unter WEB-INF, wenn Sie das Servlet ausführen
[Java] Dateien in src / main / resources lesen
[Java] Ganzzahlige Informationen von Zeichen in der Textdatei, die mit der Methode read () erfasst wurden
Werfen Sie einen kurzen Blick auf Gradle und lesen Sie das von Spring Initializr generierte build.gradle
Lesen Sie die Paketerfassung, die von tcpdump mit Java erhalten wurde
Bildverarbeitung: Grundstruktur des vom Programm gelesenen Bildes