C# “哪一个在性能上更有效?”;x>=a「;或;x>;a | x==a;?
我不知道下面的内部实现。简而言之,哪一个性能更有效,C# “哪一个在性能上更有效?”;x>=a「;或;x>;a | x==a;?,c#,C#,我不知道下面的内部实现。简而言之,哪一个性能更有效,x>=a还是x>a | | x==a 编辑1: 让我们将其分为两种情况: 当a和x属于同一类型时 当a和x不在同一类型时 严格地说,他们是不平等的。操作员可能会超负荷执行完全不同的操作。只有在功能相同的情况下,才与他们的表现相关 它们在功能上也不同,在第二个示例中,表达式x和a被计算多次,而不是一次。(值得一提的是。)如果这些表达式引起副作用,或者计算成本很高,那么这可能与其功能或性能特征有关 在不知道具体类型的情况下,我们也无法真正谈论
x>=a
还是x>a | | x==a
编辑1:
让我们将其分为两种情况:
- 当
和a
属于同一类型时x
- 当
和a
不在同一类型时x
严格地说,他们是不平等的。操作员可能会超负荷执行完全不同的操作。只有在功能相同的情况下,才与他们的表现相关 它们在功能上也不同,在第二个示例中,表达式
x
和a
被计算多次,而不是一次。(值得一提的是。)如果这些表达式引起副作用,或者计算成本很高,那么这可能与其功能或性能特征有关
在不知道具体类型的情况下,我们也无法真正谈论他们的表现。对于这些运算符,某些类型可能与其他类型的运算符具有完全不同的性能特征。我可以卑鄙地在我的
=
操作符中抛出一个线程。Sleep(1000)
,仅仅因为。您的表达式已经完全减少了。无法编写需要少于1次比较操作的x>=a
,这就是它现在所做的。当x
和a
是原语时,优化器很可能会将两者转换为相同的代码。但是,当x
和a
是带有函数调用的复杂表达式,并且在相当大的比例下,“小于”表达式返回false
时,您将看到“小于或等于”的表达式执行得更快。此外,第一个表达式没有分支,而第二个表达式有分支。为什么你认为两个比较可能比一个更有效?它可能编译为完全相同的汇编代码…@TimSchmelter:因为我不知道x>=a
实际上是如何插入的。:-)@Liel,不太可能,因为后者可以多次“调用”x
。你应该集中精力编写像样的代码。让编译器处理opimizationYea,您还可以使用