7

你好,我的问题是是否可以在 C# 中使用 TimesSpan 打印微编码。

我有下一个例子:

DateTime startTime = DateTime.Now;
..../some code
DateTime endTime = DateTime.Now;
TimeSpan totalTimeTaken = endTime.Subtract(startTime);
Label3.Text=(totalTimeTaken.Milliseconds).ToString();

此代码允许我以毫秒为单位显示,但我需要显示微秒有没有办法将其更改为微秒或者我必须使用其他东西?

必须编辑我的问题:我的目标是测量在 2 个 DateTime 之间花费的时间,因为它是几行代码,毫秒不会削减它,这就是我需要微秒的原因。

4

4 回答 4

10

您将通过Stopwatch 类找到最高分辨率。如果您的 CPU 支持高分辨率计时器,则 Stopwatch 类将使用它。您可以通过IsHighResolutionand/orFrequency属性进行检查。

这是您应该用于性能测量的类,而不是DateTime.

编辑:我刚刚学到了一些关于 DateTime 的新知识。从文档...

时间值以 100 纳秒为单位,称为刻度,特定日期是公历中自 0001 年 1 月 1 日午夜 12:00 以来的刻度数(不包括闰秒添加的刻度) . 例如,刻度值 31241376000000000L 表示日期,即 0100 年 1 月 1 日星期五午夜 12:00:00。DateTime 值始终在显式或默认日历的上下文中表示。

但是, 的分辨率仍然DateTime.Now约为 15 毫秒,因此无法正常工作(这最多会使文档产生误导......)使用秒表。

于 2012-07-18T18:17:04.567 回答
1

如果您需要高精度,请使用System.Diagnostics.Stopwatch 。

从代码示例中,如果看起来您正在尝试计时。DateTime这是一个糟糕的结构。有关详细信息,请参阅 Eric Lippert 的文章“日期时间的精度和准确性”

现在,问题是“从开始到结束经过了多少时间?” 是一个与“现在几点了?”完全不同的问题。如果您要问的问题是某个操作花费了多长时间,并且您想要一个高精度、高精度的答案,那么请使用 StopWatch 类。它确实具有接近其精度的纳秒精度和准确度。

于 2012-07-18T18:14:34.747 回答
1

您可以使用 DateTime 类。DateTime 有一个名为 Ticks 的属性。

日期时间.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;
于 2012-07-18T18:18:21.620 回答
1

其他人写了关于减去 2 时可以预期的精度的好东西DateTime.Now。但还有一点很重要:使用totalTimeTaken.TotalMilliseconds而不是 totalTimeTaken.Milliseconds。通常,该数字将有 4 位小数。

要获得微秒,只需使用1000.0 * totalTimeTaken.TotalMilliseconds. 小数点后一般会有一位小数。但要重复一遍:对于典型的硬件和实现,并非所有这些数字都是可靠的。

于 2012-07-18T19:44:07.497 回答