Messen und Benchmark-Zeit für die Ruby-Methoden
Wie kann ich Messen die Zeit, die eine Methode und die einzelnen Aussagen, die in dieser Methode in Ruby. Wenn Sie die untenstehenden Methode, die ich Messen will die gesamte Zeit, die für die Methode und die Zeit, die für den Datenbank-Zugriff und redis-Zugriff. Ich möchte nicht zu schreiben-Benchmark.Messen Sie vor jede Aussage. Hat der ruby-interpreter gibt uns irgendwelche Haken dabei ?
def foo
# code to access database
# code to access redis.
end
- es ist etwas ähnlich wie die
new Date()
von javascript, ruby hat, aber ich kann mich nicht erinnern das die korrekte syntax. sollte Ihnen eine anständige google-Listung, obwohl
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie die
Time
Objekt. (Zeit Docs)Beispielsweise
diff
wäre in Sekunden als Gleitkommazahl.EDIT:
end
reserviert ist.end
reserviert ist, so verwenden einige andere Variablen-Namen.Time.now
betroffen ist, durch Anpassungen der system-Uhr, so ist es empfehlenswert, verwenden SieProcess.clock_gettime(Process::CLOCK_MONOTONIC)
statt. Aber für eine grobe Schätzung dieses spielt keine Rolle. blog.dnsimple.com/2018/03/elapsed-time-with-ruby-the-right-wayDer einfachste Weg:
Beispiel-Ausgabe:
Werte sind: cpu-Zeit, system-Zeit, Gesamt-und real verstrichene Zeit.
Quelle: ruby-docs.
Benchmark.realtime { block }
wenn Sie wollen einfach nur die Echtzeit -Verwenden Benchmark-Bericht
Diese Ausgabe wird etwa wie folgt aus:
Weitere Informationen finden Sie hier.
Benchmark
- Klasse verwendet eine monotone Uhr, wie bereits in anderen Antworten. Siehe zum Beispiel die folgenden source-code, und suchen Sie nach "def measure" auf der Linie 286: github.com/ruby/ruby/blob/ruby_2_2/lib/benchmark.rbEinen zweiten Gedanken, definieren die measure () - Funktion mit Ruby-code-block-argument kann helfen, zu vereinfachen, die Zeit zu Messen-code:
benchmark
. Wenn Sie es verwenden, es heißtmeasure
. Bitte dieses Problem beheben.Viele Antworten empfehlen die Verwendung von
Time.now
. Es lohnt sich aber bewusst, dassTime.now
ändern können. System Uhren Driften kann und könnte korrigiert werden, indem das system-administrator oder über NTP. Es ist daher möglich, für die Zeit.jetzt vorwärts springen oder zurück und geben Sie Ihrem benchmarking ungenaue Ergebnisse.Eine bessere Lösung ist die Verwendung des Betriebssystems monotonic clock, welche immer voran. Ruby 2.1 und oben ermöglichen den Zugang zu diesem über:
Lesen Sie mehr details hier. Auch können Sie sehen, populären Ruby-Projekt, Sidekiq, den Schalter auf monotonic clock.
Blick in die
ruby-prof
Paket, sollte es haben, was Sie brauchen. Es wird riesigen Stapel mit timings.http://ruby-prof.rubyforge.org/
Könnte es auch als Granulat, in dem Fall nur Verpackung größere Teile in
Benchmark.measure
könnte ein guter Weg zu gehen.In den Geist der wquist Antwort, aber ein wenig einfacher, Sie könnte es auch tun, wie unten: