实用工具的主要逻辑是这样的函数:
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秒)。但它报告“Run run 00:00:01”。
我不希望时间有微秒精度,但为什么它在这里完全不准确?
更新
根据建议,我在同一时期运行了StopWatch
,并与减去两个DateTime
进行了比较,并调试了代码。这两种方法同意一小部分......调试器中的StopWatch
有1139毫秒。我的假设是,不知何时写入控制台的时间不包括在内但我没办法支持它(或反驳它)。
答案 0 :(得分: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课程用于您的目的
答案 1 :(得分:2)
我怀疑问题出在DateTime
。可能,程序完成并将输出发送到控制台缓冲区,这实际上是显示它的甜蜜时间。你看到的是输出滞后。
答案 2 :(得分:1)
为什么不使用秒表?
Stopwatch ss = new Stopwatch();
ss.Start();
// Some quantity of work.....
ss.Stop();
Console.WriteLine("Elapsed time: {0}", ss.Elapsed.TotalMilliseconds);
答案 3 :(得分:0)
对于这种测量,DateTime不是很准确。你应该使用秒表类。
http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx
答案 4 :(得分:0)
DateTime startTime = DateTime.Now;
Thread.Sleep(5000);
DateTime endTime = DateTime.Now;
TimeSpan duration = endTime.Subtract(startTime);
Console.WriteLine(duration.Seconds);
打印“5”。你确定你的测试用例是什么吗?