Pas*_*cal 6 php oop command-line
我发现(命令行)PHP脚本的性能下降很大,这是由简单的赋值(运行时间从0.8~0.9秒增加到29.x秒)引起的.
该脚本首先从MySQL数据库中获取大量数据,并创建不同自定义类的对象.在获取之后(php现在使用大约500 MB的RAM)我循环一个大约3'500个Sample对象的数组,每个对象都有一个关联数组(大小约100个条目)作为其属性之一.该数组包含Value对象,这些对象是具有两个属性的小对象,键是小于6'000的整数.这是我偶然发现问题的地方,请看这段代码:
foreach ($samples as $id => $s) { # $s is now a 'Sample' object
$values = $s->values(); # $values is an array of 'Value' objects
if (isset($values[$match_id])) {
$num_tested++;
# $val = $values[$match_id]; # contains a 'Value' object
# $val = &$values[...]; -> the loop never ends (!)
}
}
Run Code Online (Sandbox Code Playgroud)
注意注释行.如果我运行此处显示的代码,此块将运行大约0.8到0.9秒.如果我取消注释该单行,则该块运行将近30秒.我发现如果数组是非关联的(它只包含从0到大约100的连续键),运行时只会增加到1.8~1.9秒.
似乎这是因为我使用的非连续数组键,但是为什么性能还没有通过调用而下降isset($values[$match_id])呢?是否有针对此的解决方法或我必须忍受它?
运行PHP 5.3.0,Zend Engine v2.3.0,Mac OS X Server 10.6.2
| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |