0

实用工具的主要逻辑是在这样的函数中:

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同一时期运行了 a 并与减去 two 进行了比较DateTime,并且还调试了代码。这两种方法同意不到一秒……StopWatch在调试器中有 1139 毫秒。我的假设是不包括以某种方式写入控制台的时间,但我无法支持(或反驳它)。

4

5 回答 5

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类用于您的目的

于 2013-03-13T11:49:30.267 回答
2

我怀疑问题出在DateTime. 很可能,程序完成并将输出发送到控制台缓冲区,这正在花时间实际显示它。你看到的是输出滞后。

于 2013-03-13T12:29:10.980 回答
1

为什么不使用秒表?

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

Console.WriteLine("Elapsed time: {0}", ss.Elapsed.TotalMilliseconds);
于 2013-03-13T11:51:15.053 回答
0

DateTime 对于这种测量来说不是很准确。您应该使用秒表类。

http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

于 2013-03-13T11:46:30.970 回答
0
DateTime startTime = DateTime.Now;
Thread.Sleep(5000);
DateTime endTime = DateTime.Now;
TimeSpan duration = endTime.Subtract(startTime);
Console.WriteLine(duration.Seconds);

打印“5”。你确定你的测试用例是什么?

于 2013-03-13T12:06:41.140 回答