2012-03-29 2 views
-1

C#ストップウォッチをオブジェクトに追加することによって発生するパフォーマンス上のペナルティはどのくらいですか?C#ストップウォッチを追加することによるパフォーマンスのペナルティ?

+0

なぜ、追加時にパフォーマンスの問題が発生していますか? – Oded

+14

秒ストップウォッチを使用してペナルティをベンチマークすることができます;) –

+1

ストップウォッチを使用してマイクロベンチマークを作成します: –

答えて

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"); 
      } 
     } 

違いは微々たるものである - しかし、それはかなりC#プログラミングの文脈におけるその重要すべきではないパフォーマンス目標:)

+0

「重要」と思ってください。それは数秒、ミリ秒などを意味しますか? –

+0

私のクアッドコア2.83 GHz、8 GB Ram、およびx64 Win7の5000回の反復では、0.000XXX秒のオーダーでした。 – Alex

1

に依存します。それが重要であることが判明した場合は、StopwatchとC#のニーズ/使用を再考してください。

これを1000回実行し、タイミングを計り、結果を1000で除算することで、ベンチマークをいつでも試行できます。この機能の要求性能を正確に表すのは難しいですが、それがどのように関係するかを見てください。

+1

私はこれを行い平均で0.258ミリ秒を得て、Stopwatch.StartNewでインスタンス化し、.ElapsedMillisecondsで測定します。これは、適度に高速なマシン上でローカルのデバッグモードになっていました。 – Abacus

関連する問題