这个问题几乎说明了一切。目前,我正在使用Math.Abs(a - b)
计算减法表达式的绝对值,例如5 - 10
和10 - 5
都返回5
。
有没有更有效的方法可以做到这一点,还是最有效的方法?
最佳答案
在您确切知道问题出在哪里之前,请不要对代码进行微优化。
您可以实现自己,并使其成为内联函数,以使用MethodImplAttribute降低函数调用的成本。
如果您使用的是Int32值,而您的输入不是碰巧是边界值,则可以使用此值
Abs(x) = (x ^ (x >> 31)) - (x >> 31)
但是我建议您忘记所有这些,配置您的应用程序,您会发现真正的问题出在调用
Math.Abs
之外的其他地方,应该始终使代码可读,然后在证明它们确实是性能之后,对性能问题进行调整问题!程序员浪费大量时间思考或担心
关于他们程序中非关键部分的速度,以及这些
尝试提高效率实际上会产生严重的负面影响
考虑调试和维护。我们应该忘记小
效率,大约有97%的时间:过早的优化是
万恶之源。然而,我们不应该放弃我们的机会
临界3%。
(DonaldKnuth的论文“ StructuredProgrammingWithGoToStatements”)
请阅读this