例如,以下任何语言之间是否存在实际 1 性能差异:
for i=1 to 10:
print i
for i=1 to 10:
print i
for i=1 to 10:
print i
for i=1 to 10:
print i
for i=1 to 10:
print i
与
for i=1 to (10 * 5):
print i%10
显然,这项任务通常不那么重要,但重点仍然存在。如果你必须迭代一个数据集,那么在一次传递中对该数据进行所有操作与反复循环遍历该数据集有什么好处?
1:我知道反复重新分配空间可能会产生相关费用。但是,如果时间与任何现实生活任务相比微不足道,那么我们暂时不要理会它。
答案 0 :(得分:2)
简短的回答取决于:
根据执行的实际任务,可以通过一种方法相对于另一种方法改进可读性。这是影响正确性和可维护性的实际问题。 这应该是您主要关注的问题。
在较小的循环中分解大循环可以提高缓存效率。但是现在缓存大小相当大。
将大循环分解为较小的循环可能会产生更简单的表达式,这在您的示例中很明显,或者更少的测试。您可能会看到针对多重循环案例的改进,但是这么小就不应该是一个令人信服的理由。
将小循环组合成较大的循环可能会产生较少的比较和跳跃,就像您的示例中的情况一样,可以进行微小的改进。但是对于您的示例,完全展开小循环可能更有利。
与往常一样,对于性能调整,您必须执行基准测试并比较实际数据的时序。除非您看到一个重大改进,否则请选择最简单,最易读和可维护的解决方案。请注意,最优性是一种临时情况,环境,技术,数据量和特征的任何变化都可能影响任何解决方案的性能。