Ich möchte die Zeit messen, die bestimmte Funktionsaufrufe in meiner Anwendung dauern. Dazu benutze ich die Stopwatch
Klasse und es funktioniert gut. Es sieht ungefähr so aus:Zeitmessung von Funktionen mit unterschiedlicher Signatur in C#
static readonly Stopwatch StopWatch = new Stopwatch();
StopWatch.Restart();
void func();
StopWatch.Stop();
Assert.Blabla
Allerdings tippe ich dies um viele Funktionen. Gibt es eine Möglichkeit, eine Funktion zu machen, die das für mich tut? Ich habe es versucht, aber da die Signaturen der Funktionen alle unterschiedlich sind, kann ich es nicht herausfinden. Ich schaute auf Func
und Action
, aber sie scheinen eine feste Signatur zu erfordern. Ich würde so etwas wie dies mag:
Definieren Sie eine Methode, die Ihre tatsächlichen Methoden delegieren als Eingabe:
public static TimeSpan GetTimestampFor(Action action)
{
TimeSpan timestamp = new TimeSpan(0);
Stopwatch stopWatch = new Stopwatch();
if (action != null)
{
stopWatch.Start();
action.Invoke();
stopWatch.Stop();
timestamp = stopWatch.Elapsed;
}
return timestamp;
}
und nennen Sie es, wie unten
CallAndMeasureFunction(func)
Ja, C# ist eine stark typisierte Sprache, natürlich benötigen Sie eine feste Signatur .... – Milney
Dies wird Profiling genannt. Verwenden Sie ein .NET-Profiling-Tool, um diese Statistiken zu erhalten. Siehe die Antwort hier https://stackoverflow.com/questions/14019510/calculate-the-execution-time-of-a-method (series0ne antwort) – ojf
Oder schauen Sie in eine Bibliothek wie: https://github.com/petabridge/NBench – Milney