JeuWeb - Crée ton jeu par navigateur
Objet vide = mémoire ?? WTF??? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Objet vide = mémoire ?? WTF??? (/showthread.php?tid=5778)

Pages : 1 2


Objet vide = mémoire ?? WTF??? - Wells - 28-10-2011

Bonjour à tous. J'ai une grosse classe "Planete" avec beaucoup d'attribut et de méthode dedans.

Cependant, le constructeur ne fait rien, j'instensi donc un objet soit dit en vide.

Seulement voila il y a un hic avec la mémoire; Voici le code :

Code :
echo '<br />Mémoire aprés recup données: '.round((memory_get_usage(FALSE)/1048576),2).' Mo';
$LISTE_SYSTEME = new WSysteme;
unset($LISTE_SYSTEME);
echo '<br><br>Mémoire apres sys joueur: '.round((memory_get_usage(FALSE)/1048576),2).' Mo';

qui donne:

Citation :Mémoire aprés recup données: 3.13 Mo
Mémoire apres sys joueur: 4.28 Mo

Heu c'est quoi la blague la?? Mon unset il sert à rien? Pk un objet vide prend il autant de place en mémoire de base?

Nb: le garbage collecter de PHP5 est activé dans ce test


RE: Objet vide = mémoire ?? WTF??? - niahoo - 28-10-2011

et ça ça donne quoi ?

echo 'Mémoire aprés recup données: ' . round((memory_get_usage(FALSE) / 1048576), 2) . ' Mo';
$LISTE_SYSTEME = new WSysteme;
echo 'Mémoire aprés new ' . round((memory_get_usage(FALSE) / 1048576), 2) . ' Mo';
unset($LISTE_SYSTEME);
echo 'Mémoire apres

Est ce que ton objet envoie $this à quelque chose ?


RE: Objet vide = mémoire ?? WTF??? - djidi - 28-10-2011

Ca pourrait t'aider : http://www.php.net/manual/fr/function.unset.php#98692


RE: Objet vide = mémoire ?? WTF??? - Wells - 28-10-2011

Pour etre plus précis voila ou ca peche:

Code :
$requete = "SELECT Id_Systeme,CoordX,CoordY,iEnv,Nom_Systeme,Climat,PopActu,Id_Joueur
        FROM systeme_joueur WHERE $requete ORDER BY $ordre";
        $res = $dbh->query($requete);
        while($data = $res->fetch(PDO::FETCH_ASSOC))
            {
            $temp = new WSysteme();
            $temp->RemplitObjet($temp,$data);
            $this->ListeOBJ[$data['Id_Systeme']]=$temp;
            unset($temp);
            }

en gros j'ai un objet WSysteme principal qui contient un attribut ListeOBJ dans lequel je met en mémoire d'autres objets WSysteme.

je créé donc une liste de WSysteme;

sauf qu'a chaque new WSysteme(); (vide !!!!!!) il me bouffe 700 ko de mémoire. Forcement ca crash au bout d'un moment.

Le soucis n'est donc pas tant le contenu de l'objet mais ca "coquille" qui prend enormement de place.


RE: Objet vide = mémoire ?? WTF??? - niahoo - 28-10-2011

attention aux références circulaires
Code :
$temp = new WSysteme();
             $temp->RemplitObjet($temp,$data);
c'est pas forcément mauvais mais hors contexte il n'y a aucune raison de passer un objet à lui-même.


RE: Objet vide = mémoire ?? WTF??? - Argorate - 28-10-2011

comme l'a dit djidji, tu as essayé de rajouter: $temp->__destruct(); ?


RE: Objet vide = mémoire ?? WTF??? - djidi - 28-10-2011

HS : Rhhhaaaaa mais arrêtez d'écorcher mon pseudo Tongue


RE: Objet vide = mémoire ?? WTF??? - Argorate - 30-10-2011

Sry, il est vraiment pas facile à lire Smile


RE: Objet vide = mémoire ?? WTF??? - Wells - 31-10-2011

Le problème est bien que le fait d'avoir beaucoup de ligne de code dans un objet le rend lourd en mémoire. Je trouve ça ahurissant mais je vois pas d'autres solutions que de faire un objet light, et un autre avec les méthodes, voir couper en MDC....


RE: Objet vide = mémoire ?? WTF??? - niahoo - 31-10-2011

Est-ce que tu as des sources pour ce que tu dis car ça ne me semble pas très logique !