2011-12-27 19 views
2

HipHop-> C++コンパイル済みPHPスクリプトで文字列連結に深刻な問題があります。HipHop PHP - 文字列連結の問題

私のスクリプトは文字列の連結に大きく依存し、PHPでは0.6秒、HipHopでは60秒で実行されます。それはほぼ10,000%の違いです!

this articleに応じて、動的メモリ割り当てに問題があるように見える:

彼らは私たちの疑惑を証明します。ソースコードのコンパイルでは、C、C++、C#などのコンパイルされた他の言語のメジャーな部分 が知られています。 遅い文字列操作、およびStringBuilder機能の必要性。

HipHopコンパイルされたスクリプトは、他のすべての領域でかなり高速で、約50%の速度とメモリの向上をもたらします。これは私のプロジェクトにとって重要なことです。

私の質問は、HipHopコンパイル済みのPHPスクリプトで必要なメモリを事前に割り当てるように強制するにはどんなトリックが必要なのでしょうか(それとも、激しい減速の原因となるこのあいまいな動的メモリ割り当てを止めさせるか)。あるいは、文字列を連結する別の巧妙なやり方、あるいはある種の文字列ビルダーの実装がありますか?

+0

私は '$ a =' '; for($ i = 0; $ i <50000; $ i ++)$ a = "テスト"コードとHipHopはPHPの10倍の速さで動作します。 HipHop on-the-flyコンパイルではなく、コンパイルされたプログラムを実行してもよろしいですか?あなたのコードとHipHopの実行方法を教えてください。 – XzKto

+0

確かに、私はあなたのためのいくつかのコードセグメントを取得します。 – Alasdair

+0

私は次のようにコンパイルします: 'hphp script.php --program = AppName -t cpp -f exe -o AppName' – Alasdair

答えて

0

実際にどのように連結を実行しているかの例を挙げてください。このポストに見られるように、いくつかの簡単な改良点があります。

Optimizing PHP string concatenation

+0

この '$ text = 'text'のように$ var = 'text';または$' = str_pad($ var、5); ' – Alasdair

+0

$ text = 'text'、$ var、 'text'; – user1117332

+0

これは、理論的には少ししか改善されていないはずですが、問題があれば役立つかもしれません。 – user1117332