当前位置: 首页 > wzjs >正文

高邮做网站工商执照查询官网

高邮做网站,工商执照查询官网,洛江网站建设报价,做购物网站的步骤PHP版本>5.5 原理:yield关键字会生成一个Generator类的对象,PHP通过Generator实例计算出下一次迭代的值,再次返回一个Generator对象并停止循环(即循环一次执行一次)。 理解:使用在for/foreach/while循…

PHP版本>=5.5

原理:yield关键字会生成一个Generator类的对象,PHP通过Generator实例计算出下一次迭代的值,再次返回一个Generator对象并停止循环(即循环一次执行一次)。

理解:使用在for/foreach/while循环内部,用来返回循环结构体本次生成的元素。yield会记录结构体本次循环所处的位置,下次执行循环时从上次的位置开始执行,再次生成一个元素。所以yield返回的数组内永远只有一个元素,所以叫做生成器。

目的:节省内存,防止内存溢出。

yield节省内存场景:
(1)在for/foreach/while循环结构体中,生成上亿个元素,在内存中都只有一个元素。
(2)在fgets读取文件中,每次都读取一行数据到内存中,大文件可以像小文件一样读取。
(3)在mysql读取数据中,每次都获取一行数据到内存中,就算几十万的数据也不会占用过多内存。

场景(1):

<?php
/*** 使用 yield关键字创建数组* @param $number* @return Generator*/
function createRangeYield($number): Generator
{for ($i = 0; $i <= $number; $i++) {yield time();if (($i % 20000) == 0) {// 内存使用以 MB 为单位echo "$i\t" . round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;}}
}/*** 直接生成数组* @param $number* @return array*/
function createRange($number): array
{$data = [];for ($i = 0; $i <= $number; $i++) {$data[] = time();if (($i % 20000) == 0) {// 内存使用以 MB 为单位echo "$i\t" . round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;}}return $data;
}$time1 = microtime(true) * 1000;
echo "常规函数循环 10W次内存使用量\n";
$result = createRange(100000); // 这里调用上面创建的函数
foreach ($result as $value) {# code...
}
$time2 = microtime(true) * 1000;
echo "耗时:".( round($time2 - $time1,3)). "毫秒\n";$time1 = microtime(true) * 1000;
echo "\nyield函数循环 10W次内存使用量\n";
$result = createRangeYield(100000); // 这里调用上面创建的函数
foreach ($result as $value) {# code...
}
$time2 = microtime(true) * 1000;
echo "耗时:".( round($time2 - $time1,3)). "毫秒\n";

执行结果分析:

场景(2):

<?php
header("content-type:text/html;charset=utf-8");
/*** 使用 yield关键字读取大文件* @return Generator*/
function readTxtYield(): Generator
{$handle = fopen("D:/ttt.txt", 'rb');$i = 0;while (feof($handle) === false) {yield fgets($handle);if (($i % 200000) == 0) {// 内存使用以 MB 为单位echo "$i\t" . round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;}$i++;}fclose($handle);
}/*** 常规函数读取大文件* @return array*/
function readTxt(): array
{$handle = fopen("D:/ttt.txt", 'rb');$i = 0;$lines = [];while (feof($handle) === false) {$lines[] = fgets($handle);if (($i % 200000) == 0) {// 内存使用以 MB 为单位echo "$i\t" . round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;}$i++;}fclose($handle);return $lines;
}$time1 = microtime(true) * 1000;
echo "常规函数读取 100W行文件内存使用量\n";
foreach (readTxt() as $key => $value) {# code...
}
$time2 = microtime(true) * 1000;
echo "耗时:".( round($time2 - $time1,3)). "毫秒\n";$time1 = microtime(true) * 1000;
echo "\nyield函数读取 100W行文件内存使用量\n";
foreach (readTxtYield() as $key => $value) {# code...
}
$time2 = microtime(true) * 1000;
echo "耗时:".( round($time2 - $time1,3)). "毫秒\n";

执行结果分析:

场景(3):

<?phpconst DB_NAME = 'yibai_purchase';// 数据库名称
const DB_HOST = '192.168.73.73';
const DB_USERNAME = 'dev_purchase';
const DB_PASSWORD = 'yb123456';
const LIMIT = 50;
const DSN = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME;/*** 使用 yield关键字 读取数据库数据* @return Generator*/
function readSqlDataYield(): Generator
{$i = 0;$lines = [];$options = [PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,];$connectObj = new PDO(DSN, DB_USERNAME, DB_PASSWORD, $options);$query_tables = "SELECT * FROM yibai_purchase.pur_supplier_payment_record WHERE 1=1 limit 100000";$stmt = $connectObj->query($query_tables);while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {yield $row;if (($i % 20000) == 0) {// 内存使用以 MB 为单位echo "$i\t" . round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;}$i++;}
}/*** 常规函数读取数据库数据* @return array*/
function readSqlData(): array
{$i = 0;$lines = [];$options = [PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,];$connectObj = new PDO(DSN, DB_USERNAME, DB_PASSWORD, $options);$query_tables = "SELECT * FROM yibai_purchase.pur_supplier_payment_record WHERE 1=1 limit 100000";$stmt = $connectObj->query($query_tables);while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {$lines[] = $row;if (($i % 20000) == 0) {// 内存使用以 MB 为单位echo "$i\t" . round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;}$i++;}return $lines;}$time1 = microtime(true) * 1000;
echo "常规函数读取 10W行数据库数据内存使用量\n";
foreach (readSqlData() as $key => $value) {# code...
}
$time2 = microtime(true) * 1000;
echo "耗时:".( round($time2 - $time1,3)). "毫秒\n";$time1 = microtime(true) * 1000;
echo "\nyield函数读取 10W行数据库数据内存使用量\n";
foreach (readSqlDataYield() as $key => $value) {# code...
}
$time2 = microtime(true) * 1000;
echo "耗时:".( round($time2 - $time1,3)). "毫秒\n";

执行结果分析:

综合三种场景,发现内存使用量明显减少,并且执行用时不会有太大差异。


文章转载自:

http://hzPqFjbO.ggnfy.cn
http://5u2OzH1i.ggnfy.cn
http://yyf0Kxmr.ggnfy.cn
http://8NMyQSXa.ggnfy.cn
http://8lk71R1H.ggnfy.cn
http://4P7Wmief.ggnfy.cn
http://Vpuxl0gr.ggnfy.cn
http://h6cpgSLa.ggnfy.cn
http://Yyd8WWoD.ggnfy.cn
http://RB5owG6C.ggnfy.cn
http://hxqMEyeK.ggnfy.cn
http://lofXc2GR.ggnfy.cn
http://8DBEtRxc.ggnfy.cn
http://xA4pO4eo.ggnfy.cn
http://p7ROld7U.ggnfy.cn
http://qoOpODuE.ggnfy.cn
http://RNsMZfOT.ggnfy.cn
http://RI6qNy4l.ggnfy.cn
http://4uZSA4wL.ggnfy.cn
http://OaCyNc1d.ggnfy.cn
http://MJRUYz7W.ggnfy.cn
http://N5Bokicc.ggnfy.cn
http://pLcEQoWY.ggnfy.cn
http://sU847k0n.ggnfy.cn
http://a0nAxTYj.ggnfy.cn
http://p6MllbcF.ggnfy.cn
http://PrBU4QPY.ggnfy.cn
http://iGx30zK8.ggnfy.cn
http://EvoY86aZ.ggnfy.cn
http://Qo2GGpka.ggnfy.cn
http://www.dtcms.com/wzjs/672506.html

相关文章:

  • 电子商务网站策划书3000字商丘网络推广平台
  • 有什么免费的网站怎样入门网站开发
  • 提高网站流量的软文案例软件前端开发主要做什么
  • 做窗帘网站图片大全网站流量统计系统企业版
  • wp网站如何做文件的付费下载蚂蜂窝网站源码
  • 北京建设厅网站江门网站建设优化
  • 移动端网站怎么提交网站开发完整的解决方案
  • 百度基木鱼建站杭州建设网站的公司哪家好
  • 网站建设工具哪家好芜湖seo
  • wordpress邮件通知怎么做网站的优化
  • 东莞运营推广网站建设费用哈尔滨市工程建设监理有限公司
  • 泰安建站哪家好wordpress营销型大气
  • 简单网站建设优化推广网站建设感想
  • 免费看电视的网站专门做汽配的网站
  • 衡水网站公司农村电商平台
  • php教育学校网站源码西安外贸建站
  • 网站内链怎么删除wordpress文章编辑软件
  • 缙云建设局网站中国建设银行网站-个人客户
  • 注销网站备案申请表wordpress小说
  • 川畅咨询 网站建设推广链接点击器
  • 公众号电影网站怎么做wordpress网站翻译插件
  • 北京高端 网站建设青海网站建设
  • 外贸自助建站全球速卖通买家版
  • 网站开发毕业设计企业网站怎么做推广比较好
  • 原墨网站建设深圳互联网营销
  • 龙岗区住房和建设局网站打不开建筑企业管理咨询公司是做什么的
  • 网站专题制作流程网推公司招聘
  • 本机做网站服务上传到网站建设方案word
  • 免费行业网站源码设计之家广告设计
  • 哪个网站可以做代销请科技公司做网站需要注意什么