Thread Seltsamer Effekt beim Dateieinlesen
(31 answers)
Opened by marky at 2011-09-26 11:25
also ich bekommen andere Werte:
Code: (dl
)
1 create file test.txt (62914560 Byte) with 776722 Lines and 81 chars per line getestet hiermit: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #!/usr/bin/perl use strict; use warnings; use Benchmark qw(cmpthese); my $file='test.txt'; my $file_size=60*1024*1024; # 60MB my $iter=10; # create file { my $lines=int($file_size/81); print "create file $file ($file_size Byte) with $lines Lines and 81 chars per line\n"; open(my $fh, '>', $file) or die("$file : $!\n"); for(1..$lines) { print $fh join('',map{chr(int(rand(94))+32)}(1..80))."\n"; } close($fh); } # open only once open(my $fh, '<', $file) or die("$file : $!\n"); # loding file in OS-Filesystem-Cache: { local $/=undef; <$fh>; } print "Run Benchmark\n"; cmpthese($iter, { 'read all' => sub{ # goto file start seek($fh,0,0); my @l=<$fh>; }, 'read push' => sub{ # goto file start seek($fh,0,0); my @l; while(<$fh>) { push(@l,$_); } }, }); close($fh); Das ist auch ein Ergebnis das ich erwartet hätte. Ich vermute mal, dass du beim ersten Lesen noch die Datei noch nicht Gepuffert ist. das macht den ersten Zeitwert so schlecht, das dieser sich bei zehn Duchläufen deutlich auswirkt. Weiterhin ist das öffnen /schließen einer Datei verhältnismäßig langsam und nicht immer konstant, so das hier auch Ungenauigkeiten auftreten könnten. Ich kenne deinen Testcode nicht, aber ich würde vermuten, dass du weit aus mehr misst als nur das reine Lesen der Daten. Last edited: 2011-09-26 18:19:57 +0200 (CEST) |