Ich habe das folgende Programm, das eine große Eingabe (eine Liste von Erweiterung / Mime-Mapping, eine Liste von Dateien) und Ausgabeergebnisse Zeile für Zeile (der MIME-Typ für jede Datei).
%Vor%Das Programm war ziemlich langsam, also fing ich an, es zu profilieren, und ich bekam ein seltsames Ergebnis.
Wenn mit
kompiliert %Vor% Das Programm ist sehr langsam. Das -fprof-auto
scheint jedoch alles zu beschleunigen. Zusammengestellt mit
macht es blitzschnell -prof
allein hat keine Wirkung.
Seltsamerweise ist es auch sehr schnell, wenn es mit runghc coding.hs
ausgeführt wird.
Ich habe keine Ahnung in welche Richtung ich von dort gehen soll. Versteht jemand, was hier passiert?
EDIT: Ich sollte erwähnen, dass mein ghc 7.10.1 ist.
Um eine vollständige Antwort auf die Frage zu geben:
Wie Reid Barton bereits erwähnt hat, scheint das Problem die berüchtigte State Hack-Optimierung zu sein, die mimeMap
in die wiederholte IO-Aktion einfügt und sie viel öfter als nötig ausführt. -fno-state-hack
deaktiviert diese Optimierung und behebt das Problem. Eine andere Möglichkeit, das Problem zu lösen, ist eine strenge Evaluierung von '' mimeMap '' zu erzwingen.
Es scheint jedoch auch eine Regression in GHC 7.10 zu geben, in der -fno-state-hack
dies tut löst das Problem nicht. Das erklärt, warum es das nicht für mich repariert hat.
Vielen Dank für Ihre Antworten.
Tags und Links haskell