高效地创建大量对象


Create large numbers of objects efficiently

编辑:当我发布这个问题时,我不完美的自己做出了错误的假设,我觉得这个问题可能会误导。事实证明,效率问题与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;
    }
}

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

  • 用于运行脚本的服务器
  • 当然是代码效率——这里有一篇关于编写高效php代码的好文章

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