2009-12-09 5 views

Répondre

3

Je suis sûr qu'il ya un programme là-bas, me regardant toujours, mais je found this on a forum:

La plupart des débutants AS3 ont programmé quelque chose, puis entendu parler de fuites de mémoire. Donc d'abord je vais couvrir les moyens de détecter et de réparer les fuites dans le code préexistant, puis parler des mesures préventives à prendre lors du démarrage de la programmation. Alors, comment savez-vous si votre programme a un problème? La façon la plus claire de le dire est de savoir s'il se bloque, mais c'est très peu pratique. Heureusement, dans AS3, nous avons un objet appelé System dont les propriétés nous renseignent sur les conditions dans lesquelles Flash s'exécute. System.totalMemory, par exemple, est la quantité de mémoire de l'ordinateur utilisée par l'instance de Flash Player qui exécute votre programme. Différentes plates-formes déterminent la valeur de System.totalMemory de différentes manières. Je vous suggère donc d'exécuter une seule instance de Flash Player à la fois pour mesurer sa valeur.

package { 

    import flash.utils.Timer; 
    import flash.system.System; 

    public class SpitMem { 
     var t:Timer = new Timer(0); 
     var n:int, lastN:int; 

     public function SpitMem():void { 
      t.addEventListener("timer", spit2, false, 0, true); 
     } 

     private function spit1():void { 
      trace(System.totalMemory); 
     } 

     private function spit2():void { 
      n = System.totalMemory; 
      if (n != lastN) 
       trace(n); 
      lastN = n; 
     } 
    } 
} 

Si vous créez une instance de la classe SpitMem ci-dessus et exécutez votre code, vous pouvez observer les fluctuations dans l'utilisation de la mémoire de votre programme dans la fenêtre de sortie. C'est beaucoup d'informations, cependant, et dans ce format, il ne peut pas vous donner une image claire de la façon dont votre programme utilise sa mémoire. (Notez la différence ci-dessus entre spit1() et spit2() .Spit2() ne produira pas le fichier System.totalMemory s'il n'a pas été modifié Plus tard, je montrerai comment une logique similaire peut transformer nos données en quelque chose plus utile.)

Si vous faites un graphique de vos données dans un tableur, vous remarquerez que cela semble toujours augmenter. Cela ne signifie pas que vous avez une fuite de mémoire. La gestion de la mémoire intégrée de Flash permet à certains types de données de rester en place jusqu'à ce qu'il y ait un moment approprié pour s'en débarrasser. C'est ce que l'on appelle le garbage collection, et pour la plupart des projets Flash, votre mémoire s'accumulera, puis diminuera. C'est ce qu'on appelle un graphique en dents de scie, et c'est tout à fait normal.

1

Avec la sortie de Flash Player 10.1 preview construit, Adobe mis un composant qui réalise la surveillance de la mémoire pour vous: Memory Monitoring Component

+0

Cela semble utile , mais j'ai remarqué quand j'ai testé l'outil (le .fla), la mémoire continue à monter et monter puis redescend et continue de répéter .. une idée pourquoi est-ce? –

+1

Je suppose que c'est un comportement normal: la mémoire monte, le garage collecteur nettoie, la mémoire baisse, répète. –

2

C'est bon outil pour actionscript 3 analyse de la mémoire et le profilage http://demonsterdebugger.com/

+0

Il a un moniteur de mémoire qui est très utile pour trouver des fuites de mémoire. – Sat