Thread Seltsamer Effekt beim Dateieinlesen (31 answers)
Opened by marky at 2011-09-26 11:25

topeg
 2011-09-26 18:18
#152681 #152681
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
also ich bekommen andere Werte:

Code: (dl )
1
2
3
4
5
create file test.txt (62914560 Byte) with 776722 Lines and 81 chars per line
Run Benchmark
Rate read push read all
read push 1.22/s -- -1%
read all 1.23/s 1% --


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)

View full thread Seltsamer Effekt beim Dateieinlesen