再次问我是否有可能在C#中使用TimesSpan打印microsencods。
我有下一个例子:
DateTime startTime = DateTime.Now;
..../some code
DateTime endTime = DateTime.Now;
TimeSpan totalTimeTaken = endTime.Subtract(startTime);
Label3.Text=(totalTimeTaken.Milliseconds).ToString();
此代码允许我以毫秒显示但我需要显示微秒是否有办法将其更改为微秒或我是否必须使用其他东西?
必须编辑我的问题: 我的目标是测量在2个DateTime之间花费的时间,因为它只是很少的代码行,毫秒不会削减它,这就是我需要微秒的原因。
答案 0 :(得分:8)
您将找到的最高分辨率将通过Stopwatch class。如果您的CPU支持高分辨率计时器,则Stopwatch类将使用它。您可以通过IsHighResolution
和/或Frequency
属性进行检查。
这是您应该用于性能测量的类,而不是DateTime
。
时间值以称为刻度线的100纳秒单位测量,特定日期是格里高利历日历中自公元0001年1月1日午夜12:00起的刻度数(不包括将添加的刻度)闰秒)。例如,刻度值31241376000000000L表示日期,星期五,1月01日,0100 12:00:00午夜。 DateTime值始终在显式或默认日历的上下文中表示。
然而,DateTime.Now
的分辨率仍然是大约15毫秒,所以它不起作用(这使文档充其量误导......)使用秒表。
答案 1 :(得分:2)
您可以使用DateTime类。 DateTime有一个名为Ticks的属性。
从链接:
“单个刻度表示一百纳秒或一千万分之一秒。在一毫秒内有10,000个刻度。
此属性的值表示自0001年1月1日午夜12:00:00起经过的100纳秒间隔的数量,表示DateTime.MinValue。它不包括可归因于闰秒的刻度数。“
DateTime dt1 = DateTime.Now;
// do stuff here...
DateTime dt2 = DateTime.Now;
long nanoseconds = (dt2.Ticks - dt1.Ticks) * 100;
答案 2 :(得分:1)
如果您需要高水平的精确度,请使用System.Diagnostics.Stopwatch。
从代码示例中看起来就像是在尝试计算某些东西。 DateTime
是一个糟糕的结构。有关详细信息,请参阅Eric Lippert的文章"Precision and Accuracy of DateTime"。
现在,问题是“从开始到结束已经过了多长时间?”的问题是 一个完全不同的问题,而不是“现在几点了?”如果 你想问的问题是一些手术需要多长时间, 并且你想要一个高精度,高精度的答案,然后使用 StopWatch类。它确实具有纳秒精度和准确度 这接近它的精确度。
答案 3 :(得分:0)
当你减去两个DateTime.Now
时,其他人已经对你可以预期的精度写得很好。但还有一点很重要:使用totalTimeTaken.TotalMilliseconds
,不 totalTimeTaken.Milliseconds
。一般来说,这个数字将有4位小数。
要获得微秒,只需使用1000.0 * totalTimeTaken.TotalMilliseconds
即可。小数点后通常会有一个小数。但重复一遍:并非所有这些数字在典型硬件和实现方面都是可靠的。