想象一下,我有一个名为X的变量。 让我们说每5秒我想让X =真。 (在这5秒钟之间可能是真或假,但是当5秒钟时,它会重置为真。)
检查值是否已经是真的更有效,如果没有,重新分配为true?或者只是X =真?
换句话说,哪个会运行得更快?if(x==false){
x = true;
}
VS
x = true;
一方面,如果不需要,第一个程序不会改变变量。另一方面,第二个程序不需要检查X等于什么;它直接潜入。
答案 0 :(得分:8)
答案 1 :(得分:4)
真的取决于你的数据:)
如果x == false 90%的时间,那么对x的直接赋值会更快。
这是您可能不想担心效率的地方之一,如果您真的这样做,请对其进行分析..
答案 2 :(得分:2)
声明/警告:
这是微优化,绝不会以用户可衡量的方式影响程序的效率。如果你关闭所有的编译器优化,并运行一个优秀的分析器,你可以量化效果 - 但没有用户会注意到。
对于您的情况尤其如此,其中相关代码仅每隔几秒运行一次。花在分析上的时间可能会更好地用于改进应用程序的其他部分。
此外,在这些情况下,可读性应始终优先于非瓶颈微优化(尽管我的答案仅考虑运行时效率,如所要求的)。因此,我建议您在这种情况下使用的代码是x=true
,因为它是最容易阅读和理解的。
最后,如果添加检查会提高速度,编译器可能已经知道并且会为你做,所以你不能错过x=true
(这就是你应该在运行之前关闭优化的原因探查)。
答案:
唯一真正解决这个问题的方法是分析。您可能会发现0测试(x == false)基本上没有时间,因此值得包括,因为当x结果为真时它会保存。或者您可能会发现测试需要足够长的时间,以至于当x结果为假时会浪费太多时间。
我的猜测是测试是不必要的。这是因为0测试和其他按位操作(和,或等)都是如此之快,以至于我通常将它们视为花费相同的基本时间量。如果0测试花费的时间与OR操作相同(设置为true),则0测试会浪费时间。分析当然可能证明我错了,我的猜测是基于对按位运算的松散假设,所以如果你选择运行一个分析器并想出来,我肯定会对结果感兴趣。
答案 3 :(得分:1)
与整体设计的质量所达到的效率相比,您实现的效率是微不足道的。