我在我的代码(C#/ WPF)中对性能非常敏感的部分,我需要以尽可能快的方式在两个System.TimeSpan值之间执行模运算。如何使用System.TimeSpan值实现模数运算,无需循环?
这段代码将每秒运行数千次,我非常希望避免使用手动循环计算 - 不惜一切代价。
2周的时间跨度之间的模数的想法似乎有点怪异,所以让我来解释 -
说我们有
时间跨度A = 1分30秒
时间跨度B = 20秒
这里将是常见的操作和它们的合理结果的列表:
A + B =(时间跨度)1分50秒
A - B =(时间跨度)1分10秒
A * B =没有合理的计算方法
我们应该可以用乘以TimeSpan整数。 A * 5 =(TimeSpan)7分钟30秒
Microsoft尚未在TimeSpans和整数之间实现乘法。
A/B =(int)4或(double)4.5
此操作不是直接在.NET框架中实现的,但它非常有意义。
有在A. 4.5 B的(4.5 * 20 = 90)
A%B =(时间跨度)10秒
鉴于合理时间跨度划分,时间跨度模量应该是相当直接的。
A/B 确实等于(int)4 余数(TimeSpan)10秒。商和余数是不同的数据类型,这可能实际上是微软没有直接实现这一点的原因。
我需要找到一种有效的方法来计算这个没有循环。通常我不会反对短循环,但是这些TimeSpans可能会有很大的不同。 TimeSpans之间的指数差越大,商数越大。商数越大,“分环”必须执行的迭代越多。这是我在我的应用程序的这部分中不允许的依赖项。
这样做有什么想法吗?
答案非常简单。我觉得自己很笨,哈哈。谢谢! – Giffyguy 2009-08-18 18:55:16
一旦你有答案,一切看起来很简单。 – 2009-08-18 19:42:28