首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么php生成器比数组慢?

为什么php生成器比数组慢?
EN

Stack Overflow用户
提问于 2014-06-28 09:17:06
回答 1查看 4.4K关注 0票数 13

根据文档中的评论:http://php.net/manual/en/language.generators.overview.php

我们可以看到,由于有了生成器,内存使用率有了很大的提高(这是显而易见的),但是执行速度也慢了2-3倍--这对我来说并不是很明显。

我们以牺牲时间为代价来获得内存使用的改善--这是不可能的。

那么,为什么php生成器比数组慢呢?

谢谢你的小费。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-28 10:02:56

在进行优化时,很多时候您必须在执行速度和内存使用之间进行选择,即预先计算和存储某些内容,或者在需要时只进行计算。

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

手册指的是一种情况,在这种情况下,您将不会迭代使用生成器生成的所有结果。速度的好处将来自于这样一个事实:您不需要通过生成不需要的项来浪费处理时间和内存。

发电机的设计并不是为了替换数组。它们是一种在实现Iterator对象时减少样板代码的方法。生成器总是比数组慢,因为每次调用next()时,生成器都必须生成值。

使用生成器,您可以做一些对数组无法完成的有趣的事情--例如,您可以表示无限序列(例如,您可以创建一个只接受start和step参数的range函数)。

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

在我的机器上(用PHP5.6测试)的结果如下:

范围(1,10000000,1):

代码语言:javascript
复制
time: 5.2702
memory (byte): 1495269376

xrange(1,10000000,1):

代码语言:javascript
复制
time: 1.9010
memory (byte): 262144

请注意,我使用的“基准”代码迭代了所有结果并执行简单的数学操作。函数调用,如上面所示,仅用作我测试时使用的值的引用。和往常一样,像这样非常简单的基准,YMMV。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24465369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档