根据文档中的评论:http://php.net/manual/en/language.generators.overview.php
我们可以看到,由于有了生成器,内存使用率有了很大的提高(这是显而易见的),但是执行速度也慢了2-3倍--这对我来说并不是很明显。
我们以牺牲时间为代价来获得内存使用的改善--这是不可能的。
那么,为什么php生成器比数组慢呢?
谢谢你的小费。
发布于 2014-06-28 10:02:56
在进行优化时,很多时候您必须在执行速度和内存使用之间进行选择,即预先计算和存储某些内容,或者在需要时只进行计算。
生成器允许您编写使用foreach迭代一组数据的代码,而不需要在内存中构建数组,这可能会导致您超过内存限制,或者需要相当长的处理时间来生成。
手册指的是一种情况,在这种情况下,您将不会迭代使用生成器生成的所有结果。速度的好处将来自于这样一个事实:您不需要通过生成不需要的项来浪费处理时间和内存。
发电机的设计并不是为了替换数组。它们是一种在实现Iterator对象时减少样板代码的方法。生成器总是比数组慢,因为每次调用next()时,生成器都必须生成值。
使用生成器,您可以做一些对数组无法完成的有趣的事情--例如,您可以表示无限序列(例如,您可以创建一个只接受start和step参数的range函数)。
我有点好奇,所以我快速地比较了xrange (在PHP手册页上用生成器实现)和内置的range函数。
在我的机器上(用PHP5.6测试)的结果如下:
范围(1,10000000,1):
time: 5.2702
memory (byte): 1495269376xrange(1,10000000,1):
time: 1.9010
memory (byte): 262144请注意,我使用的“基准”代码迭代了所有结果并执行简单的数学操作。函数调用,如上面所示,仅用作我测试时使用的值的引用。和往常一样,像这样非常简单的基准,YMMV。
https://stackoverflow.com/questions/24465369
复制相似问题