TImeSpan算法与普通算术相比有多长时间?

时间:2012-06-11 23:00:19

标签: c# performance timespan

我有一个带有中断的C#程序,该中断处理我希望每隔40毫秒运行一次的列表的一部分,但是中断内部的数学可以冻结具有特定大小和属性的列表的程序。

我很想尝试通过删除TimeSpan来加速它并从数学中减去并在执行算术之前将它们全部转换为TotalMilliseconds而不是之后。有没有人知道添加和减去TimeSpans的开销是什么,与创建TotalMilliseconds并添加和减去它相比?

感谢。

1 个答案:

答案 0 :(得分:11)

这是不明智的,Timespan.TotalMilliseconds是 double 类型的属性,单位为1毫秒。这与底层结构值高度无关,Ticks是 long 类型的底层字段的属性获取器,单位为100纳秒。 TotalMilliseconds属性getter通过一些体操来将long转换为double,它确保来回转换产生相同的数字。

对于TimeSpan来说,这是一个问题,它可以覆盖10000年,精度为100纳秒。然而,一个双有15位有效数字,这还不足以覆盖那么多年的那种精度。 TotalMilliseconds属性执行舍入,而不仅仅是转换,它确保返回的值精确到一毫秒。不是100纳秒。因此,来回转换它总是会产生相同的值。

哪个有效:10,000年x 365.4天x 24小时x 60分x 60秒x 1000毫秒= 315,705,600,000,000毫秒。计算数字,精确到15,这样就足以存储在一个双精度而不会损失精确度。快乐的巧合,不是吗?

回答这个问题:如果你关心速度,那么总是使用Ticks,而不是TotalMilliseconds。这是一个非常快速的64位整数运算。 Way 比整数到浮点数+舍入转换更快。