2017-07-05 4 views
-2

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) 
+0

Ja, C# ist eine stark typisierte Sprache, natürlich benötigen Sie eine feste Signatur .... – Milney

+4

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

+0

Oder schauen Sie in eine Bibliothek wie: https://github.com/petabridge/NBench – Milney

Antwort

1

Sie so etwas wie unten verwenden können:

var timeSpan = GetTimestampFor(() => {var xyz = ActualMethodForWhichTimeHasTobeMeasured()}); 

Mit diesem Code können Sie die Ausführungszeit jeder Methode der Messung

+0

Leider kann ich Action nicht verwenden, da der Rückgabewert nicht immer ungültig ist. – Frank

+1

Aktualisierte den obigen Code. Dieser Code kann für jede Art von Methode verwendet werden, unabhängig davon, ob Sie einen Rückgabetyp haben oder nicht. Wenn Sie keinen Rückgabetyp haben, entfernen Sie einfach die {var xyz = und} – Sujith

Verwandte Themen