我的代码 (C#/WPF) 对性能非常敏感,我需要以最快的方式在两个 System.TimeSpan 值之间执行取模运算。
这段代码每秒将运行数千次,我非常希望避免使用手动循环计算——不惜一切代价。
两个 TimeSpan 之间的模数的想法可能看起来有点奇怪,所以请允许我解释一下 -
假设我们有
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 秒
给定合理的 TimeSpan 划分,TimeSpan 模数应该非常简单。
A / B实际上等于 (int)4余数(TimeSpan)10 秒。商和余数是不同的数据类型,这实际上可能是微软没有直接实现这一点的原因。
我需要找到一种有效的方法来计算它而无需循环。通常我不会反对短循环,但这些 TimeSpan 可能会有很大差异。TimeSpan 之间的指数差越大,商越大。商越大,“分循环”必须执行的迭代次数就越多。这是我在应用程序的这一部分中不能允许的依赖项。
SO有什么想法吗?