C# TimeSpan返回0作为TotalMilliseconds。

28 浏览
0 Comments

C# TimeSpan返回0作为TotalMilliseconds。

我试图对两个几乎相同的循环进行“基准测试”。当我逐个检查它们时,减法运算没有任何问题,而TimeSpan返回的TotalMilliseconds也是正确的数字。然而,当我同时对这两个循环进行基准测试时,第一个减法运算返回的数字在3-4之间(应该是正确的),而第二个减法运算总是返回0。我做错了什么?谢谢!

0
0 Comments

C# TimeSpan gives 0 as TotalMilliseconds是一个关于C#中TimeSpan类的问题。问题的原因是在某些情况下,TimeSpan的TotalMilliseconds属性返回的值可能为0。下面是解决该问题的方法。

解决方法:

尝试使用Stopwatch类来进行基准测试:

Stopwatch timer = new Stopwatch();
timer.Start();
for (int i = 0; i < 10; i++)
{
    a += i;
}
timer.Stop();
Console.WriteLine($"Elapsed time: {timer.Elapsed}");

上述代码中,我们使用Stopwatch类来计算代码块执行的时间。首先创建一个Stopwatch实例,并在代码块开始之前调用Start()方法来开始计时。然后执行代码块。最后调用Stop()方法来停止计时。通过访问Elapsed属性,可以获取经过的时间。

解决方法的结果如下(在.Net 4.6 IA-64、Core i7 3.2 GHz环境下):

00:00:00.0000003

请注意,这个时间大约是300纳秒。

通过使用Stopwatch类,我们可以获得非常精确的执行时间。相比之下,TimeSpan的TotalMilliseconds属性可能会返回0,因为它的精度较低。因此,在需要准确计算执行时间的情况下,建议使用Stopwatch类来进行基准测试。

0
0 Comments

C#中的TimeSpan类的TotalMilliseconds属性返回时间间隔的总毫秒数。然而,有时候调用该属性会返回0。问题的原因是TotalMilliseconds属性的分辨率取决于系统定时器,在Windows系统上大约为15毫秒。因此,在短时间内多次调用Now属性,比如在循环中,可能会返回相同的值。

根据文档,Now属性经常用于性能测量。然而,由于其低分辨率,它不适合用作基准测试工具。更好的选择是使用Stopwatch类。

解决此问题的方法是使用Stopwatch类来测量时间间隔,而不是使用TimeSpan类的TotalMilliseconds属性。Stopwatch类提供了更高精度的计时器,可以用于性能测量和基准测试。

以下是一个示例代码,演示如何使用Stopwatch类来测量时间间隔:

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
// 执行需要测量时间的代码
stopwatch.Stop();
TimeSpan elapsedTime = stopwatch.Elapsed;
double milliseconds = elapsedTime.TotalMilliseconds;
Console.WriteLine(milliseconds);

通过使用Stopwatch类,可以获得更准确的时间测量结果,而不会受到系统定时器分辨率的影响。

0