我正在处理非常注重性能的代码部分(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秒。商和余数是不同的数据类型,这可能是微软没有直接实现它的原因。
我需要找到一种不用循环计算的高效方法。通常我不会反对短循环,但这些TimeSpans可能差别很大。TimeSpans之间的指数差异越大,商就越大。商越大,“除-循环”将要执行的迭代次数就越多。这是我不能允许的依赖关系。
Stack Overflow有什么想法吗?