Čištění zanesené paměti

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
maarlin
Člen | 207
+
0
-

Vysktuje se mi tato „standardní“ chyba.
Allowed memory size of ... bytes exhausted (tried to allocate ... bytes)

Objeví se běžně při zpracovávání větších obrázků, resp. překročení nastaveného memory_limit.

U mě je rozdíl v tom, že se nesnažím zpracovávat veliké obrázky, ale spousty malých, proto mě napadlo, zda místo ini_set('memory_limit','24M'); existuje nějaké řešení, resp. postup, který by dokázal postupně po každém obrázku v cyklu třeba promazávat tu paměť, aby se nezaplnila, popř. zda by pomohlo nějak, pokud bych třeba po vykonání každého cyklu počkal několik sekund…

Nevím popravdě zcela jak přesně dojde k naplnění memory_limit, resp. co přesně se tam ukládá a jak se rozhoduje o tom, co se kdy smaže (po ukončení scriptu?). Jinak předpokládám, že to využívá RAM a popř. SWAP na disku, pokud je… Opravte mě prosím, pokud se mýlím…

Vím, že třeba David používá naprosto brilantně optimalizovaný loadSQL u dibi, který údajně má načítat soubor postupně, čímž se vyvaruje právě takovýmto chybám. Jak tedy lze něco takového realizovat v mém případě?

srigi
Nette Blogger | 558
+
0
-

Kazdy obrazok ktory uz neni treba, je treba manualne uvolnit z pamati

$img_handle = imagecreatefrompng("blablabla.png");
...
...
imagedestroy($img_handle);
maarlin
Člen | 207
+
0
-

srigi napsal(a):

Kazdy obrazok ktory uz neni treba, je treba manualne uvolnit z pamati

$img_handle = imagecreatefrompng("blablabla.png");
...
...
imagedestroy($img_handle);

Zkoušel jsem, prakticky nepomáhá… zkoušel jsem i unsety všech nepotřebných proměnných, které se plní v cyklu… allocated memory beze změny…

Obávám se, že jsem tak trochu narazil na podobný problém…
http://latrine.dgx.cz/…memory-leaks

v6ak
Člen | 206
+
0
-

U podezřelých tříd dej nějaký „echo“ do konstruktoru (nejspíš via Laděnka) a destruktoru, uvidíš, jestli to je OK.

Jinak problém prý má řešit PHP 5.3.