2013-03-13 75 views
0

實用工具的主要邏輯是這樣的功能:System.DateTime.Now是給壞的結果

private void Run() 
{ 
    DateTime startTime = DateTime.Now; 
    Prepare(); 
    Search(); 
    Process(); 
    DateTime endTime = DateTime.Now; 
    TimeSpan duration = endTime.Subtract(startTime); 
    Console.WriteLine("Run took {0:00}:{1:00}:{2:00}", 
     (int)duration.TotalHours, duration.Minutes, duration.Seconds); 
} 

當我運行此我可以用我自己的眼睛看到它正在採取至少5秒(Process()方法會噴出控制檯輸出,我可以觀察5-6秒的情況)。但它報告「運行了00:00:01」。

我不希望時間有微秒精度,但爲什麼這裏完全不準確?

更新: 以下建議我也跑了StopWatch同期和反對減去2 DateTime相比,也調試的代碼。這兩種方法同意一小部分秒......調試器中的StopWatch有1139毫秒。我的假設是,不知何時寫入控制檯的時間不包括在內,但我無法支持它(或反駁它)。

+1

您是否嘗試過調試它? – 2013-03-13 11:45:32

+4

我想你應該使用[Stopwatch](http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch%28v=vs.80%29.aspx),並看看[這裏](http://stackoverflow.com/questions/8754018/recommended-method-to-calculate-the-difference-between-two-timespans/8754105#8754105) – V4Vendetta 2013-03-13 11:45:49

+1

你知道'System.Diagnostics.Stopwatch'類? – spender 2013-03-13 11:45:52

回答

2

我懷疑問題是DateTime。可能,程序完成並將輸出發送到控制檯緩衝區,實際上它正在顯示它的甜蜜時間。你看到的是輸出滯後。

2

要成爲你所看到的是真正發生的事情有信心,寫測試的緣故:

DateTime startTime = DateTime.Now; 
Thread.Sleep(5000); 
DateTime endTime = DateTime.Now; 
TimeSpan duration = endTime.Subtract(startTime); 
Console.WriteLine("Run took {0:00}:{1:00}:{2:00}", 
     (int)duration.TotalHours, duration.Minutes, duration.Seconds); 

此外,最好使用Stopwatch類爲您的目的

+0

長時間運行似乎不太準確。我甚至想知道控制檯是否落後於程序實際編輯的幾秒鐘......它爲控制檯寫了很多行。我可能會比較'StopWatch'並查看是否可以看到相同的結果。 – 2013-03-13 12:01:42

1

爲什麼不使用秒錶?

Stopwatch ss = new Stopwatch(); 
ss.Start(); 
// Some quantity of work..... 
ss.Stop(); 

Console.WriteLine("Elapsed time: {0}", ss.Elapsed.TotalMilliseconds); 
0
DateTime startTime = DateTime.Now; 
Thread.Sleep(5000); 
DateTime endTime = DateTime.Now; 
TimeSpan duration = endTime.Subtract(startTime); 
Console.WriteLine(duration.Seconds); 

打印 「5」。你確定你的測試用例是什麼嗎?

+0

你的測試用例與我的不一樣。在控制檯上寫上幾千條線,並手動記錄Vs的計時器告訴你什麼,讓我知道你看到了什麼? – 2013-03-13 14:57:34

+0

@John是的,控制檯滯後。 – CodeCaster 2013-03-13 18:02:28

+0

謝謝。那似乎相當確定。 – 2013-03-13 18:29:18