之间是否存在任何性能差异
float x, y;
// Set x and y
if(x > y)
{
// do something
}
和
float x,y;
// Set x and y
if(x.CompareTo(y) > 0)
{
// do something
}
他们是在幕后做同样的事还是还有更多。我有一个性能关键代码,它做了很多次这样的比较,我想检查没有比我想象的更多。
答案 0 :(得分:4)
以下是一般性评论,无视性能。您应该知道使用运算符和IComparable
方法之间存在细微差别。他们差不多做同样的事情。不同之处在于,当您的值均为NaN
并且您正在检查是否相等。请参阅以下示例:
float x = float.NaN;
float y = float.NaN;
bool resultOperator = (x == y); // will be false
bool resultCompareTo = (x.CompareTo(y) == 0); // will be true(!)
这种不一致的原因是IComparable
接口要求x.CompareTo(x)
返回零。
答案 1 :(得分:2)
第一个会更快,更可读。
x > y
编译为IL指令,用于比较堆栈上的两个值。
x.CompareTo(y) > 0
编译为正常的方法调用,然后进行比较,这将稍微慢一些。