Thread Seltsamer Effekt beim Dateieinlesen
(31 answers)
Opened by marky at 2011-09-26 11:25 Code: (dl
)
1 use file test.txt with 66060288 Byte Veränderter Code: 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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 #!/usr/bin/perl use strict; use warnings; use Benchmark qw(cmpthese); my $file='test.txt'; my $file_size=63*1024*1024; # 60MB my $iter=10; my $size=0; $size = -s $file if(-f $file); $/="\x0A"; print "use file $file with $file_size Byte\n"; # create file if($size != $file_size) { my $lines=int($file_size/81); print "create File ($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)).$/; } my $diff=$file_size-($lines*81); while($diff>0) { print $fh chr(int(rand(95))+32); $diff--; } close($fh); } else { print "use existing File\n"; } # loding file in OS-Filesystem-Cache: print "preload file\n"; open(my $gfh, '<', $file) or die("$file : $!\n"); { local $/=undef; <$gfh>; } print "Run Benchmark\n"; cmpthese($iter, { 'read all' => sub{ open(my $fh, '<', $file) or die("$file : $!\n"); my @l=<$fh>; close($fh); }, 'read push' => sub{ open(my $fh, '<', $file) or die("$file : $!\n"); my @l; while(<$fh>) { push(@l,$_); } close($fh); }, 'read all seek' => sub{ # goto file start seek($gfh,0,0); my @l=<$gfh>; }, 'read push seek' => sub{ # goto file start seek($gfh,0,0); my @l; while(<$gfh>) { push(@l,$_); } }, }); Die Werte liegen bei mir alle so dicht bei einander, dass sie praktisch gleich sind. Alle Werte liegen innerhalb der Schwankungen durch Störungen vom System. 10 Durchläufe sind einfach nicht Aussagekräftig genug. das ganze mit einer 1MB Datei und 1000 Durchläufen: Code: (dl
)
1 use file test.txt with 1048576 Byte Das ganze habe ich auf einem Linux getestet. (Kernel 3.0) Andere Betriebssysteme können natürlich auch andere Werte liefern. |