2016-07-15 10 views
-1

Ich erstelle eine Datenbank mit einigen Informationen über Dateien.
Beispiel: Dateiname | Größe | modify_date ...

Ich dachte, was in dieser Situation effizienter ist:Perl Effizienz beim Schreiben in Datei

1) Für jede Datei, um die Informationen erhalten und drucken sie in meiner Datei

foreach my $file (@listOfFiles) {     
    my %temporary_hash = get_info_for_file($file); //store in a tempoarary hash 
                the informations for current file 
    print_info(%temporary_hash, $output_file);  // print the information in my output file 
} 

2) Shop die Informationen für jede Datei in einem Hash und drucken alle Hash auf einmal

foreach my $file(@listOfFiles){ 
    store_info_in_hash(get_info_for_file($file), %hash); // for each file, store the 
                  information in a global hash 

    } 
print_all_info(%hash, $output_file);      //after i have informations for each file 
                  print the whole hash in my output file 
+0

Ihr Programm hat vier Funktionen, und ich habe keine Ahnung, was sie tun. Wenn Sie etwas über sie erklären können, die uns helfen können, Ihre Frage richtig zu verstehen. – Arijit

+1

Warum ist Ihnen die Effizienz so wichtig? Ich denke, ich würde 'print_info (get_info_for_file ($ _), $ output_file) für @listOfFiles;' schreiben, was der ersten Option entspricht. Aber bitte verwenden Sie keine Mischung aus camelCase und snake_case. – Borodin

+0

Ich dachte, ich wäre suggestiv mit den Namen der Funktionen, habe ich einige Kommentare hinzugefügt – user30771

Antwort

3

Sie Es ist falsch, die Effizienz zu berücksichtigen, bevor Sie Ihr Programm überhaupt in Betrieb genommen haben

Sie sollten Ihren Code so klar wie möglich schreiben und debuggen. Nur dann, wenn es nicht schnell genug für Ihren Zweck läuft, sollten Sie Ihren Code durch einen Profiler legen, um die Engpässe zu entdecken, die die meiste Zeit benötigen

Die zwei Optionen, die Sie zeigen, werden wahrscheinlich nicht sehr unterschiedlich sein, es sei denn Ihre Dateien sind enorm

0

Wenn ich einen Benchmark-Test für die beiden Optionen mache, bekomme ich diese Ergebnisse (was, wenn ich die Informationsgröße für jede Datei vergrößern werde, zu noch größeren Unterschieden zwischen den beiden führen wird).

enter image description here

+1

Ziemlich, und ein Zehn-Prozent-Unterschied lohnt sich nicht mit – Borodin

+0

Ich traue Benchmark-Ergebnissen nicht, wenn ich den Benchmark nicht gesehen habe. Viel zu leicht, um falsch zu liegen. Haben Sie beispielsweise die alberne Aufrufkonvention "print_all_info (% hash, $ output_file)" wirklich behalten? Wie groß sind Ihre Daten? etc – ikegami

Verwandte Themen