webForumDet fria alternativet

fria minnet från klasser.

PHP

1 svar · 380 visningar · startad av drew

Medlem sedan mars 2007845 inlägg
Frågan#1

Jag håller på med en applikation som är ganska minnestörstig eller den gör av med minne som om det höll på att bli omodernt.

Det finns en klasser som används i början men inte behövs mer sen. Om jag använder unset($class);.

Frigörs så allt minne som klassen snott åt sig eller bara minnet för själva pekaren?

Medlem sedan mars 20007 896 inlägg
#2

unset() fungerar nog inte riktigt som du tror, framförallt är det inte en motsvarighet till free() i C.

Se följande två exempel;

function releaseMe() {
    global $var;
    unset($var);
}
$var = "Will I be released?";
releaseMe();
echo $var; // Output: Will I be released?
-------
function releaseMe(&$var) {
    unset($var);
}
$var = "Will I be released?";
releaseMe($var);
echo $var; // Output: Will I be released?

Nu visar jag exemplet med en funktion, men det samma gäller för klasser. unset() agerar bara i det lokala blocket. Så var noga med hur du försöker frigöra minne.

Ytterligare ett exempel:

echo memory_get_usage(); // Exempel-output: 28455
$xml = simplexml_load_file("./my-file-with-lots-and-lots-of-data.xml");
echo memory_get_usage(); // Exempel-output: 76320
unset($xml);
echo memory_get_usage(); // Exempel-output: 28455

I det här exemplet spelar unset() en viktigare roll, som du ser.

Så tänk på var och hur du använder unset(), om du arbetar på globala variabler eller på ett objekt som tål att frigöras.

259 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)