8

私は 2006 年以来、完璧に動作する php ベースのシステムを持っています。このシステムには、メモリ内の大きなツリーのような構造を使用して、何百万ものレコードを処理するバックエンド (CLI、cron) プロセスがあります。

Debian マシンをアップグレードすると、パフォーマンスが大幅に低下することに気付きました。

そこで、この問題を調査するために、単純なスクリプトを作成し、12 の xampp リリースをダウンロードして、異なる php バージョンで同じスクリプトを実行しました。

$start=microtime(true);
$n=10;
$counter=1;
$testarray=Array();

for ($i[1]=0;$i[1]<$n;$i[1]++) 
  for ($i[2]=0;$i[2]<$n;$i[2]++) 
    for ($i[3]=0;$i[3]<$n;$i[3]++) 
      for ($i[4]=0;$i[4]<$n;$i[4]++) 
        for ($i[5]=0;$i[5]<$n;$i[5]++) 
          for ($i[6]=0;$i[6]<$n;$i[6]++) 
            for ($i[7]=0;$i[7]<$n;$i[7]++) 
              $testarray[$i[1]][$i[2]][$i[3]][$i[4]][$i[5]][$i[6]][$i[7]]=$counter++;

$end=microtime(true);
echo "PHP ".phpversion()." ".round(memory_get_peak_usage(true)/(1024*1024),2)." mbyte max ram, ".round($end-$start,2)." seconds\r\n";

xampp win32 1.6.0a から win32 1.7.7-vc9 に対して同じスクリプトを実行すると、次の結果が得られます。

 - PHP 5.2.1 890.25 mbyte max ram, 12.43 seconds
 - PHP 5.2.1 890.25 mbyte max ram, 12.37 seconds
 - PHP 5.2.2 890.25 mbyte max ram, 12.43 seconds
 - PHP 5.2.3 890.25 mbyte max ram, 12.38 seconds
 - PHP 5.2.4 890.25 mbyte max ram, 12.5 seconds
 - PHP 5.2.5 890.25 mbyte max ram, 12.28 seconds
 - PHP 5.2.5 890.25 mbyte max ram, 12.31 seconds
 - PHP 5.2.6 890.25 mbyte max ram, 12.52 seconds
 - PHP 5.2.6 890.25 mbyte max ram, 12.54 seconds
 - PHP 5.2.8 890.25 mbyte max ram, 12.72 seconds
 - PHP 5.2.9 890.25 mbyte max ram, 12.53 seconds
 - PHP 5.3.0 975.5 mbyte max ram, 18.28 seconds
 - PHP 5.3.1 975.5 mbyte max ram, 18.06 seconds
 - PHP 5.3.5 975.5 mbyte max ram, 18.49 seconds
 - PHP 5.3.8 975.5 mbyte max ram, 17.97 seconds
 - PHP 5.3.8 975.5 mbyte max ram, 18.11 seconds

注: - 私はサーバーで xampp や Windows を使用していませんが、これが異なるバージョンを一度にテストする最も簡単な方法でした。- この問題について数回グーグルで検索しようとしましたが、関連する結果は得られませんでした - サーバー上での速度低下はほぼ同じです (ランタイムが 50% 長くなります) - この種の速度低下は問題ではないと思いますどのフレームワークやコンパイラからも受け入れられます - 新しい機能にもかかわらず、古い機能は以前と同じように機能するはずです。上司には、同じソフトウェアを搭載した同じコンピューターで同じ仕事をすることはできないとは言えません。debian を dist-upgrade したためです... Windows のアップグレードのように見えます。:)

何か案は?

4

1 に答える 1

4

ループの前にgc_disable () を呼び出します。私の時間を半分にカットします。

(php は 5.3 で新しいガベージ コレクターを追加しました)

于 2012-05-21T23:22:47.933 に答える