> フロント機能 > foreach → while |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
seasoft |
投稿日時: 2008/6/5 0:05
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
foreach → while 最近、EC-CUBE で foreach → while と書き換える動きがあるようですが、どのような意図のものですか?
パフォーマンス絡みでしょうか? 今後の更新では、同様に変更することが推奨されているのでしょうか? |
homan |
投稿日時: 2008/6/5 11:54
対応状況: −−−
|
仙人 登録日: 2007/7/2 居住地: 宮崎県宮崎市 投稿: 633 |
Re: foreach → while どこかでみた内容で、それがPHPに当てはまるかどうか不明なのですが、(Perlだったかもです)
foreachはデータをメモリに一気に読み込んでから一行ずつ処理をするのに対し、while の方はきちんと一行ずつ処理をするという事らしいです。 入力データが大きいとその差がでてくることは明らかですが、 プロセスのメモリ使用量が制限されているような共有サーバで、 大きいデーター処理にforeachを利用すると メモリ不足になるでしょう。 逆に、専用サーバーなどメモリが十分にある場合は、 whileよりもforeachの方が早いかもしれませんね。 実検証をしたわけでもないですし、そんな内容だったような気がするだけですので確証はありません なので、僕もどういった経緯でwhileに変更されているのか興味があります。
|
tao |
投稿日時: 2008/6/5 16:39
対応状況: −−−
|
一人前 登録日: 2007/12/28 居住地: 東京 投稿: 82 |
Re: foreach → while homanさんの言うとおり、確かPHPではforeach文の時は
配列が入っている変数の中身を別のメモリ領域に丸々コピー ↓ コピーしたデータの先頭から一つづつデータを取りだして処理 ↓ 終端まできたら終了→メモリ開放 という動きをしていたと思います。 あと確かエラーを吐く条件が違っていたと思います。
|
seasoft |
投稿日時: 2008/6/5 17:51
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: foreach → while そういえば、Perl のファイルハンドルからの読み込みで、
全内容を配列に読まれて落ちたことがありました。 150MBほどのファイルだったので… foreach (<FILE>) → while (<FILE>) したところ、 動作はするようになりましたが、処理時間は2倍近く になりました。 しかし、EC-CUBE は GD モジュールまで使っているので、 いまさら配列のメモリ節約など気にしても・・・という 気もします。 また、PHP5 以降は foreach でリファレンス使えるので、 将来的にはリファレンスを使う方向として、現時点では 放置でも良いのかなという気がします。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |