专业网站建设找哪家公司/seo外链优化

专业网站建设找哪家公司,seo外链优化,dedecms做国外网站,wordpress支持数据库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://www.mzph.cn/web/73655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot集成腾讯云OCR实现身份证识别

OCR身份证识别 官网地址&#xff1a;https://cloud.tencent.com/document/product/866/33524 身份信息认证&#xff08;二要素核验&#xff09; 官网地址&#xff1a;https://cloud.tencent.com/document/product/1007/33188 代码实现 引入依赖 <dependency><…

Tabby 一:如何在Mac配置保姆级教程(本地模型替换hugging face下载)

1. brew安装 mac需要先安装brew&#xff0c;如果本地已经安装过brew这一步可以忽略&#xff0c;遇到问题可以自己ai问 /bin/bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 可能遇到source .zprofile失败&#xff0c;因为…

C++中使用CopyFromRecordset将记录集拷贝到excel中时,如果记录集为0个,函数崩溃,是什么原因

文章目录 原因分析解决方案1. 检查记录集是否为空2. 安全调用COM方法3.进行异常捕获4. 替代方案&#xff1a;手动处理空数据 总结 在C中使用CopyFromRecordset将空记录集&#xff08;0条记录&#xff09;复制到Excel时崩溃的原因及解决方法如下&#xff1a; 原因分析 空记录集…

【算法学习计划】贪心算法(上)

目录 前言&#xff08;什么是贪心&#xff09; leetcode 860.柠檬水找零 leetcode 2208.将数组和减半的最少操作次数 leetcode 179.最大数 leetcode 376.摆动序列 leetcode 300.最长递增子序列 leetcode 334.递增的三元子序列 leetcode 674.最长连续递增序列 leetcode …

PC名词解释-笔记本的S0,S1,S2,S3,S4,S5状态

​&#x1f393;作者简介&#xff1a;程序员转项目管理领域优质创作者 &#x1f48c;个人邮箱&#xff1a;[2707492172qq.com] &#x1f310;PMP资料导航&#xff1a;PM菜鸟&#xff08;查阅PMP大纲考点&#xff09; &#x1f4a1;座右铭&#xff1a;上善若水&#xff0c;水善利…

Elasticsearch:使用 AI SDK 和 Elastic 构建 AI 代理

作者&#xff1a;来自 Elastic Carly Richmond 你是否经常听到 AI 代理&#xff08;AI agents&#xff09;这个词&#xff0c;但不太确定它们是什么&#xff0c;或者如何在 TypeScript&#xff08;或 JavaScript&#xff09;中构建一个&#xff1f;跟我一起深入了解 AI 代理的概…

5G智慧工厂专网部署:IPLOOK助力制造业数字化转型

5G专网 随着工业4.0时代的到来&#xff0c;制造业对高效、低延迟和智能化网络的需求日益增长。5G专网凭借其高速率、低时延和大连接特性&#xff0c;成为智慧工厂数字化转型的重要支撑。IPLOOK作为全球领先的移动核心网解决方案提供商&#xff0c;基于自身强大的5G核心网产品和…

第六届 蓝桥杯 嵌入式 省赛

参考 第六届蓝桥杯嵌入式省赛程序设计题解析&#xff08;基于HAL库&#xff09;_蓝桥杯嵌入式第六届真题-CSDN博客 一、分析功能 RTC 定时 1&#xff09;时间初始化 2&#xff09;定时上报电压时间 ADC测量 采集电位器的输出电压信号。 串行功能 1&#xff09;传送要设置…

第十二篇《火攻篇》:一把火背后的战争哲学与生存智慧

《孙子兵法》作为人类历史上最早的军事战略经典&#xff0c;其思想穿透了2500年的时空&#xff0c;至今仍在政治、商业乃至个人决策领域闪耀光芒。第十二篇《火攻篇》看似聚焦于具体的战术手段&#xff0c;实则蕴含了深刻的战争伦理与生存哲学。本文解读这一篇章如何用一把火点…

word光标一直闪的解决办法

在选项里&#xff0c;打开首选项&#xff0c;&#xff08;如果打不开&#xff0c;可以新建一个word也许就可以&#xff0c;实在不行只能靠眼疾手快&#xff0c;趁他还没闪赶紧点&#xff09; 选COM加载项&#xff0c;在里面取消勾选MicrosoftOfficePLUS

修改菜品-01.需求分析与设计

一.需求分析与设计 修改时要首先回显 设计时我们要设计哪些接口&#xff1f; 根据id查询菜品接口设计&#xff1a; 我们要根据id进行查询&#xff0c;因此在这里面id被作为路径参数。使用注解PathVariable。在查询菜品时&#xff0c;要将对应的口味也查出来&#xff0c;因此还…

动态IP与静态IP该如何选?

一、当IP地址成为"网络身份" 2023年亚马逊封号潮中&#xff0c;某杭州卖家因登录IP频繁切换&#xff08;早8点在纽约&#xff0c;午间瞬移到东京&#xff09;&#xff0c;触发平台风控导致账号冻结。这类"时空错乱症"揭示了跨境电商的生存法则&#xff1a…

【机器学习】——机器学习基础概念

摘要 本文主要介绍了机器学习的基础概念和典型过程。一个完整的机器学习过程包括数据收集、数据预处理、数据集划分、选择模型、训练模型、模型评估、模型优化和模型部署等关键步骤。在数据收集阶段&#xff0c;要获取足够且高质量的数据&#xff1b;数据预处理包括数据清理、…

麒麟信安全国产化智算一体机与海光C86芯片+ 海光DCU卡完成兼容性适配!

近日&#xff0c;麒麟信安全国产化智算一体机与国产海光C86芯片、海光DCU卡完成兼容性适配&#xff01; 在数字化转型的浪潮中&#xff0c;智能办公已成为企业提升效率、降低成本的重要手段&#xff0c;如何快速、高效地部署智能办公解决方案&#xff0c;成为许多企业面临的挑…

Axure设计之中继器表格——拖动列调整位置教程(中继器)

一、原理介绍 实现表格列的拖动排序&#xff0c;主要依赖Axure的动态面板和中继器两大核心功能&#xff1a; 动态面板交互控制 将表格的列标题封装在动态面板中&#xff0c;通过拖拽事件&#xff08;开始、移动、结束&#xff09;捕捉用户操作 在拖拽过程中实时计算鼠标位置&…

node-red dashboard

安装&#xff1a; npm install node-red-dashboard 访问&#xff1a; http://127.0.0.1:1880/ui 1. 创建一个新的 Dashboard 页面: 在 Node-RED 编辑器中&#xff0c;拖动一个 ui_dashboard 节点到工作区&#xff0c;并将其连接到你的数据流。 2. 配置 Dashboard 节点: 双击…

人体细粒度分割sapiens 实战笔记

目录 sapiens 分割示例: 分割config文件: 依赖项: mmcv安装 测试 cnn和ops一起测试: 报错: 保存图片代码: 人体box裁剪扩大,不裁剪扩大效果很差 sapiens https://github.com/facebookresearch/sapiens 分割示例: https://github.com/facebookresearch/sapie…

【cocos creator 3.x】3Dui创建,模型遮挡ui效果

官方文档&#xff1a;https://docs.cocos.com/creator/3.8/manual/zh/ui-system/components/editor/ui-model.html 1、3Dui创建 创建label&#xff0c;默认会添加canvas根节点和2dCamera 将Camera删除&#xff0c;canvas上组建去除cc.Canvas&#xff0c;cc.widget&#xff0…

车架号查询车牌号接口如何用Java对接

一、什么是车架号查询车牌号接口&#xff1f; 车架号查询车牌号接口&#xff0c;即传入车架号&#xff0c;返回车牌号、车型编码、初次登记日期信息。车架号又称车辆VIN码&#xff0c;车辆识别码。 二、如何用Java对接该接口&#xff1f; 下面我们以阿里云接口为例&#xff0…

SvelteKit 最新中文文档教程(12)—— 高级路由

前言 Svelte&#xff0c;一个语法简洁、入门容易&#xff0c;面向未来的前端框架。 从 Svelte 诞生之初&#xff0c;就备受开发者的喜爱&#xff0c;根据统计&#xff0c;从 2019 年到 2024 年&#xff0c;连续 6 年一直是开发者最感兴趣的前端框架 No.1&#xff1a; Svelte …