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行のコードをコメントアウトすると、スクリプトは約1/6の時間、約15秒で実行されます。

内部ループの数はさまざまですが、平均して約3〜15サイクルで、各サイクルに1つの新しいオブジェクトがあります。

質問:
私はPHPの専門家ではありません。私が知りたいのは:
1)事前にメモリスペースを割り当てることが役立つかどうか(もしそうなら、どのように)。
2)スクリプトの実行速度を上げるのに役立つ効率的な手順がある場合、またはオブジェクトの配列よりも効率的なデータ構造がある場合。新しく作成されたオブジェクトには、現在、整数と1つの単語を表す文字列(平均で約10文字)の2つの属性があります。

編集: これはコンストラクターです:

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 に答える