2013-03-13 85 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