2016-03-31 6 views
1

実行するスクリプトがどれくらいかかり、タイマーの使用方法を知りたがっているかどうかを確認する必要がありますので、ロジックを確認するために以下の短いテストを書きました:睡眠またはストップウォッチが正確に測定されていない

私は単に、タイマーを開始する2000ミリ秒で Start-Sleepを呼び出した後、出力しています
for($i = 0; $i -lt 11; $i++) { 
    $sw = [Diagnostics.Stopwatch]::StartNew() 
    Start-Sleep -Milliseconds 2000 
    $sw.Stop() 

    $elapsed = $sw.Elapsed.Milliseconds 
    Write-Host $elapsed 
} 

(私は何だろうと思った)経過時間(ミリ秒)。

この

が出力されます。

1 
6 
11 
11 
12 
9 
11 
12 
12 
11 
8 

私は出力から何を期待するのではない100%確信していたが、私の仮定は、これは睡眠の長さであるとして、各行は、ちょうど2000上だろうということでした。

ここで何が起こっているのか分かりますか?私は同様に混乱した結果で他の金種(分、時間、秒)でこれをテストしました。

このスクリプトを実行するたびに結果が異なり、パターンを確認できないようです。

答えて

2

ストップウォッチで何か問題はありません。 TimeSpan.Milisecondsは、TimeSpanのコンポーネントのミリ秒を返します。経過したミリ秒数を取得するには、TimeSpan.TotalMilisecondsプロパティを使用する必要があります。

もっとも正確な値はTimeSpan.Ticksです。ストップウォッチはそれ自体で時間をカウントせず、システムの高分解能タイマーの開始時と終了時の値を読み取ります。 Ticksプロパティにはその違いが含まれています。

ストップウォッチ自体から同じ値を取得することができます。 Stopwatch.ElapsedTicks,Stopwatch.ElapseMiliseconds

0

この回答は、hereです。

$sw.elapsed.millisecondsは、私が使用する必要がありますどのような(分、秒を除外)

を経過したのみミリ秒を表示します$sw.elapsedmilliseconds

です