Timespan.TotalMilliseconds はdouble型のプロパティで、単位は 1 ミリ秒です。これは、基になる構造体の値とはまったく関係ありませんが、Ticks は、100 ナノ秒単位のlong型の基になるフィールドのプロパティ ゲッターです。TotalMilliseconds プロパティ ゲッターは、long を double に変換するためにいくつかの体操を行います。これにより、前後の変換で同じ数値が生成されることが保証されます。
これは TimeSpan の問題であり、100 ナノ秒の精度で 10,000 年をカバーできます。ただし、double には 15 桁の有効数字があり、そのような精度で何年もカバーするには十分ではありません。TotalMilliseconds プロパティは、変換だけでなく丸めを実行し、返される値が 1 ミリ秒まで正確であることを確認します。100 ナノ秒ではありません。したがって、前後に変換すると、常に同じ値が生成されます。
10,000 年 x 365.4 日 x 24 時間 x 60 分 x 60 秒 x 1000 ミリ秒 = 315,705,600,000,000 ミリ秒。桁数を数えます。正確に 15 であるため、精度を損なうことなく double に格納するのに十分正確です。嬉しい偶然ですね。
質問への回答: 速度を気にする場合は、常にティックを使用し、TotalMilliseconds を使用しないでください。これは非常に高速な 64 ビット整数演算です。 整数から浮動小数点数への丸め変換よりもはるかに高速です。