2012-03-29 9 views
-1

Wie hoch ist die Leistungseinbuße beim Hinzufügen der C# Stoppuhr zu einem Objekt?C# Performance-Strafe durch Hinzufügen der Stoppuhr?

+0

Warum treten bei der Installation Leistungsprobleme auf? – Oded

+14

Sie können die Strafe mit einer Sekunden-Stoppuhr Benchmark;) –

+1

Ich würde einen Mikro-Benchmark mit einer Stoppuhr erstellen, um es Zeit :) –

Antwort

0
static void Main(string[] args) 
     { 
      Worker(1); // jit Warmup 
      var stopWatchOfStopwatchStopwatch = System.Diagnostics.Stopwatch.StartNew(); 
      var stopWatchOfLoop = System.Diagnostics.Stopwatch.StartNew(); 
      Worker(100000000); 
      stopWatchOfLoop.Stop(); 
      Console.WriteLine("Elapsed of inner SW: " + stopWatchOfLoop.Elapsed.ToString()); 
      stopWatchOfStopwatchStopwatch.Stop(); 
      Console.WriteLine("Elapsed of outer SW: " + stopWatchOfStopwatchStopwatch.Elapsed.ToString()); 

      var stopwatchOfcompareLoop = System.Diagnostics.Stopwatch.StartNew(); 
      Worker(100000000); 
      stopwatchOfcompareLoop.Stop(); 
      Console.WriteLine("Elapsed of inner SW: " + stopWatchOfLoop.Elapsed.ToString()); 
     } 
     static void Worker(int iterations) 
     { 
      for (int i = 0; i < iterations; i++) 
      { 
       Console.WriteLine("bla"); 
      } 
     } 

Der Unterschied ist unbedeutend - aber das ist ziemlich viel hängt Ihre Leistungsziele :)

+0

Bitte Menge "signifikant." Bedeutet das ein paar Sekunden, Millisekunden usw.? –

+0

Für 5000 Iterationen auf meinem Quad Core 2,83 GHZ, 8 GB RAM und x64 Win7 war es in der Größenordnung von 0,000XXX Sekunden. – Alex

1

nicht so bedeutend sein sollte im Zusammenhang mit der C# -Programmierung. Wenn es sich als signifikant erweist, überdenken Sie Ihre Notwendigkeit/Verwendung von Stoppuhr und C#.

Sie können immer versuchen, es selbst zu benchmarken, indem Sie es 1000 Mal implementieren, es zeitlich einteilen und dann die Ergebnisse durch 1000 dividieren. Es ist schwer genau zu sagen, wie leistungsfähig diese Funktion ist, aber Sie können es mit anderen einfachen vergleichen Operationen und sehen, wie es sich bezieht.

+1

Ich tat dies und bekam durchschnittlich 0.258 Millisekunden, um beide mit Stopwatch.StartNew zu instanziieren und mit .ElapsedMilliseconds zu messen. Dies war im Debug-Modus, lokal, auf einer relativ schnellen Maschine. – Abacus