与普通算术相比,TImeSpan 算术有多耗时
本文关键字:TImeSpan | 更新日期: 2023-09-27 18:36:47
我有一个带有中断的 C# 程序,该程序处理我希望每 40 毫秒运行一次的列表的一部分,但中断中的数学运算可能会冻结具有特定大小和属性的列表的程序。
我很想尝试通过从数学中删除 TimeSpan 加减法并将它们全部转换为 TotalMilliseconds 来加速它,然后再执行算术而不是之后。 有谁知道与获取总毫秒数并加减相比,加减时间跨度的开销是多少?
谢谢。
这是不明智的,Timespan.TotalMillisecondss是双精度类型的属性,单位为一毫秒。 与底层结构值高度无关,Ticks 是 long 类型的基础字段的属性获取器,单位为 100 纳秒。 TotalMilliseconds 属性 getter 通过一些体操将长整型转换为双精度值,它确保来回转换产生相同的数字。
这对TimeSpan来说是一个问题,它可以以100纳秒的精度覆盖10,000年。 然而,双精度有 15 位有效数字,这不足以以这种精度覆盖这么多年。 属性执行舍入,而不仅仅是转换,它确保返回的值精确到一毫秒。 不是 100 纳秒。 因此,来回转换它总是产生相同的值。
哪个确实有效:10,000 年 x 365.4 天 x 24 小时 x 60 分钟 x 60 秒 x 1000 毫秒 = 315,705,600,000,000 毫秒。 数数字,正好是 15,所以足够好,可以存储在一个双精度中而不会损失准确性。 快乐的巧合,不是吗?
回答这个问题:如果你关心速度,那么总是使用即时报价,而不是总毫秒。 这是一个非常快速的 64 位整数操作。 比整数到浮点数+舍入转换快得多。