2011-12-28 4 views
15

System.Diagnostics.Stopwatchコンピュータの待機時間は待機していますか?.NETストップウォッチはスタンバイ/スリープ/休止状態に対応していますか?

+0

興味深い質問、私は貧乏人のプロファイリングのためにストップウォッチを使用したことがないので、これは決して私には起こりませんでした。 – Davy8

+4

良い質問....試してみてください。 –

+0

答えから分かるように、実装固有の動作です。カウンタはオペレーティングシステムのハードウェアアブストラクションレイヤでラップされ、ハードウェア設計者はペニーをカットするための豊富なオプションを提供します。 –

答えて

3

はい、それはありません。リフレクターにコードを見てみると

はそれがStopwatch.IsHighResolutionでない場合、それは(それがDateTime.UtcNow.Ticksを使用するので、値はfalseだった、私の環境では)チック・カウントを使用することを示しています

public void Start() 
{ 
    if (!this.isRunning) 
    { 
     this.startTimeStamp = GetTimestamp(); 
     this.isRunning = true; 
    } 
} 



public static long GetTimestamp() 
{ 
    if (IsHighResolution) 
    { 
     long num = 0L; 
     SafeNativeMethods.QueryPerformanceCounter(out num); 
     return num; 
    } 
    return DateTime.UtcNow.Ticks; 
} 
+0

はい、そうです。しかし、非常に不正確です。私の答えを見てください。 –

3

実際には、少しテストした後にと表示されます。と表示されていますが、それは途方もなくなりました。これは私がやったことです:

  1. がそれを走り、すぐに私のコンピュータは、スリープモードに入れ
  2. が10秒を待ってバックアップ

自分のコンピュータを持って、以下のコードを書きましたその結果、衝撃的なElapsedの時間が4分を超えました。途中。だから、私はこれをベンチマークの一種として使用しないだろう。

ここで私が使用したコードです:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 

namespace TestingCode 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Stopwatch testing = new Stopwatch(); 

      testing.Start(); 

      Console.WriteLine("Press any key to stop timer"); 
      Console.ReadKey(); 

      testing.Stop(); 

      Console.WriteLine("Elapsed: {0}", testing.Elapsed); 

      Console.WriteLine("Done!!"); 
      Console.ReadKey(); 
     } 
    } 
}