2011-10-13 2 views
0

私は、PHPスクリプトを書くときにメモリを節約する方法について何年も読んできました。しかし、どのような種類のスクリプトを自分で本当に気にするべきですか?どのコード/スクリプト/呼び出しが最もメモリを消費しますか?メモリを食べるメモリとは何ですか

編集

これは質問で、質問これについて

編集

何でそれに答えるしないでください。このようなものが記憶を食べるのだろうか?それは完了する必要がありますが、いくつかの方法を解放する必要がありますか?

$manufacture = htmlspecialchars($_REQUEST["manufacture"]); 
$manufacture = preg_replace("/[^0-9]/","", $manufacture); 



$SQL = "SELECT * FROM STORE_MANUFACTURERS WHERE manufacturers_id = '$manufacture'"; 
$result = mysql_query($SQL); 
while($row = mysql_fetch_array($result)) { 
$manufacturers_name = $row['manufacturers_name']; 
} 
+2

'create_function()'はメモリをリークするのに適しています。すべての呼び出しは決して解放されない新しいグローバル関数を作成します。それをループで呼び出すと、素早くメグのRAMがリークします。 –

+0

それは何か具体的ではなく、膨大な量の変数を持つ膨大なコードは、多くのメモリを消費する傾向があります。 – Dani

+0

@Frank Farmer質問するのが嫌いですが、より具体的にすることができます – MHowey

答えて

2

を記録しました。私がしていることは、コーディングの標準とパターンに従うことです。私がメモリリークのトラブルに陥った後でさえ、profilingのツールでそれを理解しなければならない。XDebugKcachegrindのようなツール。 Exception safety同様

物事はうまく

を維持すべきであるあなたは犯人を見つけるためにmemory_get_peak_usage()memory_get_usage()のようなツールを使用することができます。これはpost regarding Memory Managerで確認できます。

PHPのようなスクリプト言語は自動ガベージコレクションを使用しています。自分でdeallocする必要はありません。ガベージコレクタはそれを行います(参照カウントを使用します)。あなた自身でそれをしたい場合は、unset()を使用することができます。設定されていなくてもあなたのためにそれをしない場合、いくつかのシナリオが報告されています。これについてもいくつかのバグが報告されています。あなたがownershipを取ると、この問題に直面する円を破るために参照されるオブジェクトを破壊するために、1つのインスタンスを必要とするようa:Ab:B両方が循環参照を持っているときbug#33945bug#33487

reference countingが問題に実行されます。

strtotime() memory leak bug#47285

を持ついくつかの問題は、あなたの編集に掲載されているコードは、メモリリークを持つ任意の懸念を持っているべきではありませんがあります。私はコメント

スクリプトによって割り当てられたすべてのメモリは、すぐにそれが終了すると解放され

、各要求の終わりである で@GolezTrolを引用します。特別なスクリプトを作成している場合や、ウェブサイトが非常に負荷の高い でない限り、実際には の懸念事項はありません。このような質問をする必要がある場合は、 はおそらくどちらも持っていないので、心配しないでください。

+0

5.3の大きな改善の1つは、循環参照に直面しても適切なガベージコレクションでした。 http://www.php.net/manual/en/features.gc.performance-considerations.php-btw、私はsimplexmlが循環参照をたくさん使用していると思うので、 = 5.2。バグ#33487は本当に古くなっています - それはより最近のバージョンで改善されているのだろうか? –

+0

あああまりにも私は思う。 SAXは最も安全なオプションです。 SAXで自分自身を構築する –

0

任意のコードがデータを格納している場所であれば、メモリを消費します。

設定されているすべての変数。

あなたはmemory_get_usage()機能を使用してコードをテストすることができ、あなたが100%出て完璧な外観に関するメモリリークのために行くときに考えるように多くのものがありますhere

関連する問題