fria minnet från klasser.

PHP

1 svar · 385 visningar · startad av drew

Medlem sedan mars 2007845 inlägg
Trådstart#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.

272 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)