1

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

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

if 语句每次检查都会减慢它的速度吗?我是否应该不输出并等待,这会使其明显更快吗?

另外,这样做更快:(i % 10000 == 0)还是(i == 10000)
检查相等或模数更快吗?

4

1 回答 1

1

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

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

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

也就是说,如果您的循环不占用程序运行时间的 90%,那么if语句和模数计数都不会有任何区别。通常只有在学校才会这样:)。问这个问题所花费的时间可能比不打印任何内容所节省的时间要多得多。对于开发和调试,这不是一个坏方法。

这种决策的黄金法则:

编写你能想象到的最易读和最明确的代码来做你想做的事情。如果您遇到性能问题,请先查看错误的数据结构和算法选择。如果您已经完成了所有这些并且需要一个非常快速的程序,请分析它以查看哪个部分花费的时间最多。毕竟,你可以做这种低级的猜测。

于 2013-01-19T15:32:30.797 回答