2

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

1 回答 1

0

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

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

于 2012-08-19T20:47:45.260 回答