2012-01-17 26 views
31

我這4之間完全糊塗是什麼ElapsedMilliseconds(長)之間的差額,ElapsedTicks(長),Elapsed.TotalMilliseconds(雙)和Elapsed.Milliseconds(INT)?區別? (C#)

我有一個函數

{ 
     Stopwatch sw = new Stopwatch(); 

     sw.Start(); 
     MyTimeConsumingAction(); 
     sw.Stop(); 

     sw.//what? 
    } 

我如何從以毫秒爲單位秒錶對象的財產經過我的長期運行過程中所消耗正確的時間?

編輯:我試過MSDN文檔,但沒有什麼具體有..

+0

同樣看到這個http://stackoverflow.com/questions/5793791/what-are-timer-ticks -the-unit-by-stop-watch-elapsedticks – nawfal 2013-04-22 05:22:17

回答

43

Elapsed.TotalMilliseconds(雙)返回整個的總數,自成立以來經過的毫秒小數

例如停止在1.23456秒的秒錶將返回1234.56在這個屬性。見TimeSpan.TotalMilliseconds MSDN上

Elapsed.Milliseconds(int)返回整個毫秒在當前第二

例如數在1.234秒秒錶將返回234在這個屬性。見TimeSpan.ElapsedMilliseconds

ElapsedTicks(長),因爲秒錶開始返回蜱。

在與Stopwatch類有關的原始問題的上下文中,ElapsedTicks是經過的滴答數。蜱發生在Stopwatch.Frequency的速率,所以,爲了計算經過的秒,計算:numSeconds = stopwatch.ElapsedTicks/Stopwatch.Frequency。

定義的舊答案蜱如100個毫微秒週期的數目,這是在DateTime類的上下文中是正確的,但在秒錶類的上下文中不正確的。請參閱MSDN上的Stopwatch.ElapsedTicks

ElapsedMilliseconds將舍入數返回到最接近的完整毫秒,所以這可能缺少Elapsed.TotalMilliseconds屬性可以給出的精度。

Elapsed.TotalMilliseconds是一個double,它可以在ElapsedMilliseconds爲Int64時將執行時間返回部分毫秒。例如在0.0007毫秒的計時將返回0,或1234.56毫秒將在此屬性返回1234。所以對於精度總是使用Elapsed.TotalMilliseconds。

Stopwatch.ElapsedMilliseconds on MSDN澄清。

最好的問候,

+1

請接受我的編輯,以便現在清除 – nawfal 2012-04-17 04:21:31

+1

在問題中使用'sw',請注意:'sw.ElapsedTicks'給出硬件中的滴答數依賴單位'Stopwatch.Frequency',就像你說的那樣。然而,'sw.Elapsed.Ticks'(注意額外的點!!)給出了計算的100納秒單位的滴答數,默認值是恆定值'TimeSpan.TicksPerSecond',其值爲常數'10,000,000'。 – 2016-03-08 14:53:57

1

ElapsedTimeSpan。如果你想顯示的時間,然後就Elapsed.ToString()應該這樣做

2
在一個簡短的說明

msdn

ElapsedMilliseconds 

此屬性表示經過時間四捨五入到最接近的整數毫秒值。要獲得更高精度的測量值,請使用Elapsed或ElapsedTicks屬性。

ElapsedTicks 

該屬性表示底層定時器機制中已經過的滴答數。刻度是秒錶計時器可以測量的最小時間單位。使用「頻率」字段將ElapsedTicks值轉換爲秒數。

Elapsed 

使用運行屬性檢索使用時間跨度的方法和屬性所經過的時間價值。例如,您可以將返回的TimeSpan實例格式化爲文本表示形式,或將其傳遞給需要TimeSpan參數的另一個類。

6

反映秒錶類揭示ElapsedMilliseconds是已發生滴答轉換(並四捨五入),以毫秒爲單位:

public TimeSpan Elapsed 
{ 
    get 
    { 
    return new TimeSpan(this.GetElapsedDateTimeTicks()); 
    } 
} 

public long ElapsedMilliseconds 
{ 
    get 
    { 
    return this.GetElapsedDateTimeTicks()/10000L; 
    } 
}