<?php
function yieldRange($start, $limit, $step)
{
if ($start == $limit || $step == 0) {
return $start;
} $mark = ($limit - $start > 0) == ($step > 0);
if (!$mark) {
$step = -$step;
} $distance = abs($limit - $start);
for ($i = $start; abs($start - $i) <= $distance; $i += $step) {
yield $i;
}
} $start = microtime(TRUE);
foreach (yieldRange(-1, 10, 1) as $number) {
echo "number$number : " . $number . "\n";
}
$end = microtime(TRUE);
echo "Time Used : " .($end - $start). "\n";

和 PHP 内部的函数 range() 对比了一下,在时间没看出有什么的优势,主要是在内存的使用 方式 上吧,有些情况 range() 的使用方式内存占用还是比较大的.

下面的情况内存使用情况的是差不多的:

yield.php

 <?php
function yieldRange($start, $limit, $step)
{
if ($start == $limit || $step == 0) {
return $start;
} $mark = ($limit - $start > 0) == ($step > 0);
if (!$mark) {
$step = -$step;
} $distance = abs($limit - $start);
for ($i = $start; abs($start - $i) <= $distance; $i += $step) {
yield $i;
}
} echo "yield start memory : " . memory_get_usage()." bytes\n";
foreach (yieldRange(1, 10000, 1) as $yield) {
}
echo "yield end memory : " . memory_get_usage()." bytes\n";

range.php

 <?php
echo "range() start memory : " . memory_get_usage()." bytes\n";
foreach (range(1, 10000, 1) as $range) {
}
echo "range() end memory : " . memory_get_usage()." bytes\n";

差不多就是 32 个字节的使用,刚好32位的指针地址.(平台可能有差异)

但是,如果直接把 range() 的返回值赋给一个变量,那就不只是 32 个字节的的问题了.

 <?php
echo "range() start memory : " . memory_get_usage()." bytes\n";
$ranges = range(1, 10000, 1);
foreach ($ranges as $range) {
}
echo "range() end memory : " . memory_get_usage()." bytes\n";

最新文章

  1. 【转】jQuery获取Select option 选择的Text和Value
  2. crontab 的使用
  3. (译)如何优化cocos2d程序的内存使用和程序大小:第二部分(完)
  4. MySql 服务端与客户端下载地址
  5. Spark Streaming揭秘 Day32 WAL框架及实现
  6. java项目创建和部署
  7. Keil C调试经验
  8. Asp.Net HttpApplication请求管道与Session(一)
  9. AngularJS Directive - 开场小介绍(转)
  10. 五个典型的JavaScript面试题
  11. Struts2.5简单使用入门
  12. 通过SVG与CSS3实现向上图标
  13. PHP trait
  14. mariadb集群配置(主从和多主)
  15. Teradata的DBQL使用
  16. C++11 右值引用和转移语义
  17. 读取JPG图片的Exif属性(一) - Exif信息简介
  18. oracle 年龄计算 岁 月 天
  19. Swift - JPush极光推送的使用3(根据Alias别名,给某个指定用户发推送)(转)
  20. django学习笔记(3)

热门文章

  1. helm在kubernetes环境中搭建
  2. WInform中实现设置ZedGraph中曲线的X轴与Y轴的上限与下限
  3. C# https证书通信Post/Get(解决做ssl通道时遇到“请求被中止: 未能创建 SSL/TLS 安全通道”问题)
  4. Tomcat下java普通类IO文件路径问题
  5. 第八届蓝桥杯java b组第三题
  6. Linux-----centos6.2---安装Linux的流程
  7. SharePoint 2013 Create Folder with conententtype programer
  8. FastDfs之StorageServer的详细配置介绍
  9. 【SQL server基础】objectproperty()函数
  10. Bumblebee服务网关之统一请求验证