使用while loop v / s foreach / for循环或反之亦然有什么性能问题?
在php中使用foreach循环v / s总是更好吗?
答案 0 :(得分:5)
您已将此列为“与语言无关”,但答案将是语言(或更确切地说,编译器) - 具体。
理论上,foreach
可以同样快,如果不是更快,特别是如果常规for
循环继续执行昂贵的操作来测试计数。
此外,foreach
适用于延迟加载的集合,常规for
循环必须提前知道项目数。
最后,即使foreach
在您的平台上稍微慢一点,差异也不大可能,并且 比for
循环更容易维护。不要过早优化。 (顺便说一句,这是.NET的情况,但是,他们已经整理了普查员的表现。)
答案 1 :(得分:2)
假设foreach
可能较慢 - for
循环和具有相同条件的while
循环应相等。
foreach
需要遍历手头的数据结构,因此无论结构的下一个查找(以及维护状态)如何,都可能会降低你的速度。
但是,如果您在for
或while
循环中手动执行此操作,那么它可能是相同的。
当然,最好的答案是尝试并计时,看看答案究竟是什么。
答案 2 :(得分:2)
我知道这已有多年了,但我需要为未来的googlers指出一些事情:
“foreach”要求您正在加载和完成的数据 - 例如,您将循环的数组已经存在于内存中。
“while”只需要一个值(可以是数据或false - 是否继续循环)。正确编程循环,while循环只需要加载下一个值而不是整个数据集。因此,如果您要对while循环进行编程以从函数中绘制数据,则可以大大减少内存使用量。
一个例子可能是遍历一个庞大的百万行数据库的每一行;使用foreach,你需要加载整个数据集来执行循环,这会让你的记忆活跃起来。但是使用仅拉动所需下一行的函数,您将成功完成循环。
下面的伪代码解释道:
function nextrow ()
{
static myquery = sql_query('SELECT * FROM `hugetable`')
return(next_row(myquery));
}
while(row = nextrow()) { ...do stuff... }
答案 3 :(得分:0)
简答:不。废弃一个单一的想法并不是一件有用的事情。
答案 4 :(得分:0)
我为php | architect撰写了一篇关于PHP循环问题的文章。基准测试显示,即使使用我的惰性数值范围扩展,循环开销也没有显着影响。
此外,如果您正在寻找一种语言的原始循环性能,PHP应该在您的绝对最后选择列表中。它被解释并且单独地不适合长期运行。
大多数PHP程序员都会浪费无数个循环来连接字符串。这说明了过早的优化警告。我敢打赌,只需在你的“echo”语句中添加逗号就可以使你的表现翻倍。
使用XDebug或其他东西配置您的代码。找到真正的瓶颈。循环不是它。相信我。它永远不会。