我有一个带有中断的C#程序,该程序处理我希望每40毫秒运行一次的列表的一部分,但是中断中的数学运算会冻结程序以查找具有某些大小和属性的列表。
我很想尝试通过从数学中删除TimeSpan加法和减法并将它们全部转换为TotalMilliseconds来尝试加快速度,而不是执行算术。有谁知道与获取TotalMilliseconds和相加与相减相比,添加和减去TimeSpans的开销是多少?
谢谢。
最佳答案
这是不明智的,Timespan.TotalMilliseconds是double类型的属性,单位为1毫秒。 Ticks与底层结构的值高度无关,它是底层类型字段的属性获取器,其长度为100纳秒。 TotalMilliseconds属性获取器会通过一些体操运动将长整型转换为双精度型,从而确保来回转换会产生相同的数字。
对于TimeSpan来说,这是一个问题,它可以覆盖10,000年,精度为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位整数运算。比整数到浮点+舍入转换要快得多。
关于c# - 与普通算法相比,TImeSpan算法有多耗时?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10988592/