Thread Verzeichnis durchsuchen - C# viel schneller als Perl?
(15 answers)
Opened by Gustl at 2013-07-04 16:41
Hallo,
ein Kollege von mir durchsucht ein Verzeichnis (eingeschlossen Unterverzeichnisse) nach *.pdw Files (mit C#) Das ganze dauerte bei ihm ca. 2min. Dann habe ich mir gedacht dies mit Perl mal zu probieren um zu vergleichen wie lange Perl dafür benötigt. Folgendes Script: 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 #!/usr/bin/perl -w use strict; use Time::HiRes qw(gettimeofday tv_interval); my $t0 = [gettimeofday]; my $base_path = "K:/CAD_FAB"; if (!defined($base_path) || $base_path eq '') { die "You need to specify a directory (e.g. 'dir_bot.pl subfolder')!\n"; } my @directorys; my @files_erg; # Durchsucht rekursiv den Path nach Dateien und Verzeichnissen process_files ($base_path); print "\nAnzahl pdw-Files:".scalar(@files_erg)."\n"; # benötigte Zeit ausgeben my $sec = tv_interval($t0); my $min = int($sec/60); my $ms = $1 if( ($sec =~ /\.(\d)/)); $sec = $sec%60; print "\nDie Ausfuehrung dauerte ".$min." Minuten und ".$sec.".".$ms." Sekunden.\n"; exit; # Durchsucht rekursiv den Path nach Dateien .pdw (Unterverzeichnisse eingeschlossen) sub process_files { my $path = shift; opendir (DIR, $path) or die "Unable to open $path: $!\n"; my @files = grep { !/^\.\.?$/ && !-d $_ } readdir (DIR); closedir (DIR); @files = map { $path . '/' . $_ } @files; foreach(@files){ unless(-d $_){ if( $_ =~ /.*\.pdw/ ){ print $_."\n"; push(@files_erg, $_); } } else{ #push(@directorys, $_); process_files ($_); } } } Nun diese Script benötigt aber fast 7Minuten! Habe ich im Script eine Bremse drin? Das eine interpretierte Sprache nicht so schnell ist wie c# ist schon klar, aber der Unterschied ist schon enorm finde ich. Würde mich interessieren. Gruß Gustl Last edited: 2013-07-04 16:56:22 +0200 (CEST) |