重复循环中if语句的速度会影响整体性能吗?

时间:2013-01-19 14:21:14

标签: performance dynamic if-statement

如果我的代码需要一段时间才能执行,那么每次迭代打印结果都会使程序变慢。为了仍然接收偶尔的输出来检查代码的进度,我可能会:

if (i % 10000 == 0) {
    # print progress here
}

if语句每次检查都会减慢吗?我不应该只输出输出而只是等待,这会让它明显加快吗?

此外,执行速度更快:(i % 10000 == 0)还是(i == 10000)? 是否更快地检查相等或模数?

1 个答案:

答案 0 :(得分:1)

一般情况下,根本不重要。

稍微长一点的答案:除非循环运行数百万次并且其中的另一个语句实际上比if语句要求更低(例如,简单的乘法等),否则无关紧要。在这种情况下,您可能会看到性能略有下降。

关于(i % 10000 == 0)(i == 10000),后者显然更快,因为它只是比较,而前一种可能性是(相当昂贵的)模数和比较。

也就是说,如果你的循环不占用程序运行时间的90%,if语句和模数统计都不会使任何区别。通常只在学校才是这种情况:)。通过询问这个问题你可能花了很多时间而不是通过不打印任何东西来节省。对于开发和调试,这不是一个糟糕的方法。

这种决定的黄金法则:

  

编写您可以想象的最可读和最明确的代码   你想要它做的事情。如果您遇到性能问题,请查看   首先是错误的数据结构和算法选择。如果你做了   所有这些和需要一个真正的快速程序,对其进行分析以查看哪个   部分花费大部分时间。在所有这些之后,你被允许这样做   低级猜测。