J'ai la fonction ci-dessous que j'appelle très fréquemment dans une boucle.PHP Garbage collection est nul ou est-ce juste moi?
J'ai attendu 5 minutes que la mémoire a grimpé de 1 Mo à 156 Mo. Est-ce que le collabateur de garabage de PHP doit se présenter et réduire cela à un moment donné ?!
Est-ce parce que j'ai défini la limite de mémoire à 256 Mo?
À l'écho 2,3,4 sa jolie utilisation de la mémoire constante. Il descend mon demi-million au point 4. Mais le point 1 est l'endroit où l'augmentation de la mémoire principale se produit. Probablement à cause de file_get_html
chargement du fichier html en mémoire.
Je pense que le clear et unset de la variable $html
prendrait soin de cela?
function get_stuff($link, $category){
$html = file_get_html(trim("$link"));
$article = $html->find('div[class=searchresultsWidget]', 0);
echo '1 - > '.convert(memory_get_usage(true)).'<br />';
foreach($article->find('h4 a') as $link){
$next_url = 'http://new.mysite.com'.$link->href;
$font_name = trim($link->plaintext);
$html = file_get_html(trim("$next_url"));
$article = $html->find('form[class=addtags]', 0);
$font_tags = '';
foreach($article->find('ul[class=everyone_tags] li a span') as $link){
$font_tags .= trim($link->innertext).',';
}
echo '2 - > '.convert(memory_get_usage(true)).'<br />';
$font_name = mysql_real_escape_string($font_name);
$category = mysql_real_escape_string($category);
$font_tags = mysql_real_escape_string($font_tags);
$sql = "INSERT INTO tag_data (font_name, category, tags) VALUES ('$font_name', '$category', '$font_tags')";
unset($font_tags);
unset($font_name);
unset($category);
$html->clear();
mysql_query($sql);
unset($sql);
echo '3 - > '.convert(memory_get_usage(true)).'<br />';
}
unset($next_url);
unset($link);
$html->clear();
unset($html);
unset($article);
echo '4 - > '.convert(memory_get_usage(true)).'<br />';
}
Comme vous pouvez le voir, j'ai essayé de faire usage de peu faible. Bien que ce ne soit pas bon comme je le comprends, il ne sera pas "désactivé" la mémoire dès que je l'appelle.
Merci à tous pour toute aide sur la façon dont je peux réduire cette augmentation de la mémoire.
Je reçois un rep neg pour ma question? Comme les notifications utiles de stackoverflow disent. Ne pas simplement rep neg, si vous le faites, suivez-le par un commentaire. – Abs
Je trouve que c'est une bonne question. Peut-être que c'est le mot «sucer» qui a provoqué cela. Upvoted. – Mchl
En php, toute la mémoire utilisée par une requête http est détruite à la fin de la requête. Cependant, le gc est utilisé pour gérer la mémoire pendant le traitement de la requête. Je crois que c'est un simple comptage de ref. – seand