バージョン選択

フォーラム

メニュー

オンライン状況

40 人のユーザが現在オンラインです。 (35 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 40
もっと...

サイト内検索

 > フロント機能 > 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に変更されているのか興味があります。


----------------
このコミュニティでの投稿はボランティアの範囲に留めさせていただいています。個別の相談やカスタマイズは有償にて承っておりますのでご相談下さい。

[url=http://www.eccube-school.jp/]EC-CUBE

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 でリファレンス使えるので、
将来的にはリファレンスを使う方向として、現時点では
放置でも良いのかなという気がします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,885名です
総投稿数は110,000件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1295
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.