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

Ror*_*rik 1 c# performance timespan

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

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

谢谢.

Han*_*ant 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位整数运算. 方式不是整数到浮子+舍入转换得更快.