Methode 1: Verwenden Sie Zeitmakro. (time exp) wird normalerweise für Zeitfunktionen verwendet, schreibt aber in die verstrichene Zeit bis zur Standardausgabe und nicht in eine Datei. Sie können "write-out-str" verwenden, um zu erfassen, was an die Standardausgabe gesendet wird, und das Ergebnis in eine Datei schreiben (mit "spit"). Diese Lösung wird (anhängt „times.txt“ to file):
(use 'clojure.java.io)
(dotimes [i 3]
(with-open [rdr (reader "input.txt")]
(doseq [line (line-seq rdr)]
(spit "times.txt" (with-out-str (time (display-huffman-encode line))) :append true))))
Methode 2: Erstellen Sie Ihre eigenen Makros, die eine Funktion ausgeführt wird und gibt die verstrichene Zeit. Das zurückgegebene Ergebnis könnte dann in eine Datei geschrieben werden. Diese Lösung ist unten gezeigt ("Bank" ist die Timing-Routine und ich habe separate Funktionen für die Protokollierung und Anzeige-Huffman-Codierung hinzugefügt).
(use 'clojure.java.io)
(defn log-info
" Places a newline so every time is on a different line "
[file-name s]
(spit file-name (format "%s %n" (str s)) :append true)) ; %n places
; platform independent newline after each time
(defmacro bench
" Times the execution of your function,
discarding the output and returning the elapsed time in seconds
(you can modify this by changing the divisor from 1e9 (i.e. for milliseconds it would be 1e6."
([& forms]
`(let [start# (System/nanoTime)]
[email protected]
(double (/ (- (System/nanoTime) start#) 1e9))))) ; Time in seconds
(defn display-huffman-encode [x]
" Test example of your display function--just sleeps for 100 ms each time its called to simulate processing "
(Thread/sleep 100)) ; Sleeps 100 ms
; Example code using the above elements
; Reading and writing to the working directory with input from "input.txt" and logging output times to "times.txt" as the logged times
(dotimes [i 3]
(with-open [rdr (reader "input.txt")]
(doseq [line (line-seq rdr)]
(log-info "times.txt" (bench (display-huffman-encode line))))))
zur Zeit habe ich eine Funktion, die Komprimierung von Strings tut und ich möchte diese Funktion mehrmals ausführen. Bei jeder Ausführung würde ich die Ausführungszeit in eine Datei schreiben wollen, um eine Analyse durchführen zu können. – Patrick
Ok ist fertig. Die Funktion, die ich anrufe, ist meine Frage. – Patrick
Um Code in die Frage einzufügen - fügen Sie ihn einfach ein, wählen Sie dann alle aus und drücken Sie entweder 'ctrl' +' K', oder benutzen Sie die '{}' Taste in der Werkzeugleiste. –