Ich habe ein Haskell-Multithread-Programm, das ein externes Programm mit System.Process.readProcess
aufruft, und das sehr oft. Wie kann ich die Leistung messen? (um zu entscheiden, ob ich mein Programm oder das externe verbessern soll.) Wie erscheint die "externe Zeit" im Profil (+ RTS -p) oder im Eventlog (das threadscope-Bild)?
Sie können ProcMon für diese Aufgabe verwenden.
Setzen Sie Filter auf Ihren Prozessnamen, wählen Sie nur "Prozesse und Thread-Aktivität anzeigen" und Sie können genau sehen, was mehr Zeit kostet. Sie können das Protokoll sogar für eine Langzeitüberwachung speichern und analysieren.
Ich schlage Ihnen auch vor, einen anderen Ansatz für dieses Problem zu verwenden:
Auf diese Weise werden Sie den Overhead los, der beim fortwährenden Spawn / Kill des Child-Prozesses verschwendet wird.
Haben Sie erwogen, Criterion , eine Haskell Microbenchmarking-Bibliothek, zu verwenden?
Diese Bibliothek bietet eine leistungsstarke, aber einfache Möglichkeit, die Softwareleistung zu messen. Es bietet sowohl einen Rahmen für das Ausführen und Analysieren von Benchmarks als auch eine Reihe von Treiberfunktionen, die das Erstellen und Ausführen von Benchmarks sowie das Analysieren ihrer Ergebnisse erleichtern.