Thread datein in verzeichnis durchlaufen (17 answers)
Opened by Gast at 2006-01-14 21:03

esskar
 2006-01-17 05:11
#61914 #61914
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
man lernt nie aus

Code: (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
#!/usr/bin/perl

use strict;
use warnings;

use Benchmark qw(:all);

my %folders = (
   Temp1 => 10,
   Temp2 => 100,
   Temp3 => 1000,
   Temp4 => 5000,
   Temp5 => 10000,
   # Temp6 => 20000,
);

foreach my $folder (sort keys %folders) {

   print "Folder: $folder, Files: ", $folders{$folder}, "\n";

   timethese(5, {
       'Pq' => sub {
           foreach my $file (glob "$folder/*") {
               my $filename = $file;
               if(-f $filename) {
               #   print STDERR "$filename\n";
               }
           }
       },
       'Strat' => sub {
           opendir(my $DIR, $folder) or die "Error: couldn't open dir '$folder': $!\n";

           my @files = map { "$folder/$_" }         # file => path/file
               grep { -f "$folder/$_" } # wenn datei und .txt
               readdir($DIR);
           closedir($DIR);

           foreach my $file (@files) {
               my $filename = $file;
             #  print STDERR "$filename\n";
           }
       },
       'Esskar' => sub {
           opendir(my $DIR, $folder) or die "Error: couldn't open dir '$folder': $!\n";
           while(my $file = readdir $DIR) {
               my $filename = $folder . '/' . $file;
               if(-f $filename) {
               # print STDERR "$filename\n";
               }
           }
           closedir($DIR);
       },
   });

}


Folder: Temp1, Files: 10
Benchmark: timing 5 iterations of Esskar, Pq, Strat...
   Esskar:  0 wallclock secs ( 0.00 usr +  0.00 sys =  0.00 CPU)
           (warning: too few iterations for a reliable count)
       Pq:  0 wallclock secs ( 0.00 usr +  0.00 sys =  0.00 CPU)
           (warning: too few iterations for a reliable count)
    Strat:  0 wallclock secs ( 0.00 usr +  0.00 sys =  0.00 CPU)
           (warning: too few iterations for a reliable count)
Folder: Temp2, Files: 100
Benchmark: timing 5 iterations of Esskar, Pq, Strat...
   Esskar:  0 wallclock secs ( 0.00 usr +  0.05 sys =  0.05 CPU) @ 108.70/s (n=5)
           (warning: too few iterations for a reliable count)
       Pq:  0 wallclock secs ( 0.00 usr +  0.08 sys =  0.08 CPU) @ 63.29/s (n=5)
           (warning: too few iterations for a reliable count)
    Strat:  0 wallclock secs ( 0.03 usr +  0.00 sys =  0.03 CPU) @ 161.29/s (n=5)
           (warning: too few iterations for a reliable count)
Folder: Temp3, Files: 1000
Benchmark: timing 5 iterations of Esskar, Pq, Strat...
   Esskar:  1 wallclock secs ( 0.19 usr +  0.63 sys =  0.81 CPU) @  6.15/s (n=5)
       Pq:  1 wallclock secs ( 0.41 usr +  1.11 sys =  1.52 CPU) @  3.30/s (n=5)
    Strat:  1 wallclock secs ( 0.16 usr +  0.67 sys =  0.83 CPU) @  6.04/s (n=5)
Folder: Temp4, Files: 5000
Benchmark: timing 5 iterations of Esskar, Pq, Strat...
   Esskar:  9 wallclock secs ( 1.20 usr +  7.86 sys =  9.06 CPU) @  0.55/s (n=5)
       Pq: 19 wallclock secs ( 1.73 usr + 16.59 sys = 18.33 CPU) @  0.27/s (n=5)
    Strat: 10 wallclock secs ( 0.92 usr +  7.91 sys =  8.83 CPU) @  0.57/s (n=5)
Folder: Temp5, Files: 10000
Benchmark: timing 5 iterations of Esskar, Pq, Strat...
   Esskar: 43 wallclock secs ( 3.17 usr + 39.39 sys = 42.56 CPU) @  0.12/s (n=5)
       Pq: 85 wallclock secs ( 6.53 usr + 76.41 sys = 82.94 CPU) @  0.06/s (n=5)
    Strat: 42 wallclock secs ( 3.19 usr + 38.06 sys = 41.25 CPU) @  0.12/s (n=5)


ich hätte gedacht, dass die Strat-Lösung langsamer sein muss als die Esskar-Lösung, da ja bei Strat alle Dateien zweimal durchlaufen werden müssen

PS: Alle Namen sind frei erfunden. :)\n\n

<!--EDIT|esskar|1137512567-->

View full thread datein in verzeichnis durchlaufen