コード (C#/WPF) のパフォーマンスが非常に重要な部分を使用しており、可能な限り迅速に 2 つの System.TimeSpan 値の間でモジュラス演算を実行する必要があります。
このコードは 1 秒間に何千回も実行されるため、手動のループ計算を使用することは絶対に避けたいと考えています。
2 つの TimeSpans 間のモジュラスの考え方は少し奇妙に思えるかもしれません。説明させてください -
TimeSpan
A = 1 分 30 秒
TimeSpan B = 20 秒 があるとします。
一般的な操作とその妥当な結果のリストを次に示します。
A + B = (TimeSpan)1 分 50 秒
A - B = (TimeSpan)1 分 10 秒
A * B = 合理的な計算方法がないTimeSpan に整数を掛ける
ことができるはずです。A * 5 = (TimeSpan) 7 分 30 秒
Microsoft は、TimeSpan と整数の間の乗算を実装していません。
A / B = (int)4 または (double)4.5
この操作は .NET フレームワークに直接実装されていませんが、完全に理にかなっています。
A には 4.5 個の B があります (4.5 * 20 = 90)。
A % B = (TimeSpan) 10 Seconds
適切な TimeSpan 除算が与えられた場合、TimeSpan モジュラスは非常に単純なはずです。
A / Bは実際には (int)4残り(TimeSpan)10 秒に等しい。商と剰余は異なるデータ型です。これが、Microsoft がこれを直接実装していない理由かもしれません。
ループせずにこれを計算する効率的な方法を見つける必要があります。通常、私は短いループに反対しませんが、これらの TimeSpans は大きく異なる可能性があります。TimeSpans 間の指数関数的な差が大きいほど、商は大きくなります。商が大きいほど、「除算ループ」を実行する必要がある反復回数が多くなります。これは、アプリのこの部分では許可できない依存関係です。
SOには何かアイデアがありますか?