为什么php生成器比foreach慢?

szy*_*asz 13 php performance foreach generator

根据文档的评论:http://php.net/manual/en/language.generators.overview.php
我们可以看到,由于生成器有大量的内存使用改进(这是显而易见的),但也有2-执行速度慢3倍 - 这对我来说并不那么明显.

我们以牺牲时间为代价来提高内存使用率 - 这并不好.
那么,为什么php生成器比foreach慢?

谢谢你的提示.

Chr*_*n P 11

在计算机科学中,在进行优化时,您必须在执行速度和内存使用之间做出选择,即预先计算某些内容并将其存储或在需要时进行计算.

生成器允许您编写使用foreach迭代一组数据的代码,而无需在内存中构建数组,这可能会导致您超出内存限制,或者需要相当长的处理时间来生成

本手册可能是指您不会迭代使用生成器生成的所有结果的情况.速度效益将来自于您不需要通过生成不需要的项目来浪费处理时间和内存.

此外,发电机不是为取代阵列而设计的.它们旨在作为在实现Iterator对象时减少样板代码的方法.

将它们与数组进行比较时,生成器总是会变慢,因为每次调用next()以保存内存时,生成器都必须生成值.

编辑

我有点好奇,所以我做了一个快速和脏的比较xrange(用生成器实现,如在PHP手册页上)和内置range函数.

我的机器上的结果(用PHP 5.6测试)是:

范围(1,10000000,1):

time: 5.2702
memory (byte): 1495269376
Run Code Online (Sandbox Code Playgroud)

xrange(1,1000000,1):

time: 1.9010
memory (byte): 262144
Run Code Online (Sandbox Code Playgroud)

请注意,我使用的"基准"代码是迭代所有结果并执行简单的数学运算.如上所示,函数调用仅用作我正在测试的值的参考.与往常一样,通过这样简单的基准测试,YMMV.