php - 为什么 PHP strtolower 的性能变化如此之大?

标签 php performance

我在网站上做了一些分析,发现 strtolower 调用花费了意外的长时间。

上下文是


function __autoload($class_name) {  
  require_once('app/model/' . strtolower($class_name) . '.php');  
}

结果是
_0.0092 -> ___autoload() C:\xxx\config.php:0_
0.0093 -> strtolower() C:\xxx\config.php:77
0.0101 -> require-once(C:\xxx.php) C:\xxx\config.php:77
我在跟踪文件的几个地方看到了这一点。

然后我在以下上下文中尝试了该函数


for($i=0;$i<100;$i++) {  
  strtolower('SomeStRIng' . $i)  
}

结果是
0.0026 -> strtolower() C:\xxx\index.php:53
0.0027 -> strtolower() C:\xxx\index.php:53
0.0027 -> strtolower() C:\xxx\index.php:53
0.0027 -> strtolower() C:\xxx\index.php:53

两者之间存在显着差异。当然,这总体上没什么大不了的,但我仍然感到困惑。

最佳答案

您运行的测试规模太小,数据太少。您永远不会获得一致的数据,因为其他系统因素(如 CPU 速度/负载)会造成更大的损失。

您的第一个测试是磁盘绑定(bind)的。降低(希望是合理的)短字符串的大小写基本上是瞬时的,或者至少以微秒为单位进行测量。点击磁盘以定位/加载/解析文件将花费毫秒级的时间。您正在尝试检测您不关心的部分所花费的时间是原来的 1000 倍的差异。即:strtolower 开销是一个舍入误差。

您的第二个测试虽然纯粹受 cpu/内存限制,但也太短而不实用。您不能确定进行 100 次字符串连接(以及相关的内存分配)不会压倒实际的小写。更好的测试是预先构建一系列混合大小写字符串(几百或几千个),然后重复遍历该数组并在 seuqnce 中 strtolower。这样您就可以消除尽可能多的开销/不相关的代码路径,并有望获得更一致的数据。

关于php - 为什么 PHP strtolower 的性能变化如此之大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3542917/

相关文章:

javascript - 灰尘 : what about performance?

php - 将 Google Analytics 跟踪代码添加到联系表单

php - 如何使用 PHP 在 Mysql 中存储数组

php - Magento迁移错误500

performance - 读取CSV文件时Powershell拦截并修复特定值

c# - MSSQL参数消耗更多时间

php - pg_query_params 因参数过多而失败

php - 如何完全跳过 PayPal 付款确认页面?

performance - 最有效的 R 余弦计算

java - 编译器使用关联性有什么问题?