有效地创建大量对象

时间:2012-08-19 20:43:29

标签: php performance

编辑:当我发布此问题时,我的不完美的自我做出了错误的假设,我觉得这个问题可能会产生误导。 效率问题实际上与push_array无关。

这些评论有助于我理解: 1)这不应该花这么长时间,而且 2)用microtime()诊断效率问题是一种很好的做法 结束编辑

我在测试场景中创建~1400个对象。我认为~1400将处于典型使用范围内。

public $t = Array();   
...
for(...){    
    code...   
    for(...){    
        array_push($this->t, new T($i, $str));    //<--this line slows program.
        count++;    
    }   
    code...
}    

不幸的是,脚本运行大约需要90秒。如果我使用array_push注释掉一行代码,脚本将在大约1/6的时间内运行,大约15秒。

内循环计数有所不同,但每个循环平均大约3到15个循环,每个循环有一个新对象。

问题:
我不是PHP的专家。我想知道:
1)如果事先分配内存空间会有所帮助(如果是这样的话) 2)如果我应该采取任何有效步骤,这将有助于脚本运行得更快或数据结构比对象数组更有效。新创建的对象当前有两个属性,一个整数和一个表示单个单词的字符串(大致平均约10个字符)。

修改 这是构造函数:

class T{
    public $line; 
    public $text;
    function __construct($ln, $txt){
        $this->line = $ln;
        $this->text = $txt;
    }
}

1 个答案:

答案 0 :(得分:0)

运行时取决于几个不同的因素:

当然还有更多的因素,但从以前的经验来看,它不应该花那么长时间,但是,我所掌握的关于你正在创建的对象的信息还不够宽,所以我可以发现问题出在哪里。 顺便说一句,使用PHP加速器(如APC或xcache)可能会改善代码运行时。