2009-10-11 11 views

答えて

23

Stopwatchクラスはあなたが探しているクラスだと思います。

+0

+1、タイミングについて(対絶対時間を得る)、ストップウォッチはそれです。 – orip

+2

ストップウォッチは間違いなくBCLの時間を計測する最良の方法ですが、ナノ秒には正確ではありません。 – overstood

+3

@overstood:確かに、nanoTimeメソッドと同じように、精度はナノ秒まで低下しません。 :) – Guffa

1

DateTime.Nowは現在の時間をミリ秒単位で表しますが、ナノ秒単位の正確な時間は、少なくともWindowsでは実用的ではありません。

+1

私はDateTime.Nowの精度は〜15または20ミリ秒だと思います。それは精度よりも精度が高い。 – snarf

1

最も近いものは、DateTime.ToFileTime()メソッドです。あなたはそうのようなのDateTimeのインスタンスでこれを呼び出すことができます。

long starttime = DateTime.Now.ToFileTime() 

方法は、Windowsのファイル時刻を返します。

A Windowsファイル時刻は、100の数を表す64ビットの値であり、 1601年1月1日午前12時00分(CE)の世界協定世界時(UTC)から経過した時間。

少なくとも100ns間隔でこれを実行できます。

SRC:http://msdn.microsoft.com/en-us/library/system.datetime.tofiletime.aspx

+0

これは、最後のウィンドウのタイマー更新の時間に対して100 nsの精度しか与えません。これは15〜16 msごとに発生します。 – overstood

+2

ok、その情報は好奇心から出てきますか? –

-1

私はあなたがナノ秒単位でタイミングしている場合、OSのハード限界にヒットするつもりだと思います。ここで話題に良い記事です:

http://www.lochan.org/2005/keith-cl/useful/win32time.html

Windowsが喜んで100ナノ秒の精度を返しますが、クロックは一度だけ、すべての15.6ミリ秒かそこらを更新することが保証されています。 Windowsは効果的に、これらの更新が100ナノ秒の精度で発生した時刻を返します。これ以上の精度を得るためには、おそらくCやアセンブラを記述し、組み込みOSを実行する準備が必要です。

1

DateTime.Now.Ticks

私はいくつかのパフォーマンステストを実行するには、この答えを見つけようとしました。

DateTime startTime = DateTime.Now; 
generatorEntity.PopulateValueList(); 
TimeSpan elapsedTime = DateTime.Now - startTime; 
Console.WriteLine("Completed! time(ticks) - " + elapsedTime.Ticks); 
2

あなたはタイムスタンプが異なるプロセス、異なる言語(Javaの、C、C#の)間で比較する場合は、GNU/LinuxとWindowsの下で(七少なくとも):

のJava:

java.lang.System.nanoTime(); 

C GNU/Linuxの場合:

static int64_t hpms_nano() { 
    struct timespec t; 
    clock_gettime(CLOCK_MONOTONIC, &t); 
    int64_t nano = t.tv_sec; 
    nano *= 1000; 
    nano *= 1000; 
    nano *= 1000; 
    nano += t.tv_nsec; 
    return nano; 
} 

CのWindows:

static int64_t hpms_nano() { 
    static LARGE_INTEGER ticksPerSecond; 
    if(ticksPerSecond.QuadPart == 0) { 
     QueryPerformanceFrequency(&ticksPerSecond); 
    } 
    LARGE_INTEGER ticks; 
    QueryPerformanceCounter(&ticks); 
    uint64_t nano = (1000*1000*10UL * ticks.QuadPart)/ticksPerSecond.QuadPart; 
    nano *= 100UL; 
    return nano; 
} 

C番号:

private static long nanoTime() { 
    long nano = 10000L * Stopwatch.GetTimestamp(); 
    nano /= TimeSpan.TicksPerMillisecond; 
    nano *= 100L; 
    return nano; 
} 
関連する問題