alors d'une si ton MVC est pourri a l'interieur
un truc comme ca
_vo = (FModelCollector.getByUid(ModelList.PICTURES_MODEL) as
FModelArray).vo as PictureVO;
si c'est pas bien testé
c'est vraiment le genre de conneries qui peut créer des memory leaks
genre "ouhla je te passe la ref du vo mais j'ai une copie autre part
que tu peux pas acceder"
tu fais un
_view.addChild(bmp);
je vois pas de
_view.removeChild(bmp);
> en gros je n'ai aucune référence à l'objet le seule bug que je
> constate c'est quand je dé-commente la ligne (*) , omis le bmp qui est
> affiché sur ma scène, mais que je remove avant de lancer la méthode
> clear de mon modèle.
>
> (*) la ligne qui bug !
> /*
> if(int(_vo.uid) < 100) {
> (ModelCollector.getByUid(ModelList.PICTURES_MODEL) as
> ModelArray).next();}
>
> */
ta ligne qui bug, tu utilises le meme principe pour acceder a ton VO
au début
et c'est justement ca qui pourrait garder une ref en mémoire
alors là tu vois j'aurais tendance a dire tu vires le MVC et on en
reparle :)
apres pour etre vraiment sur que un object est bien vidé de la mémoire
tu peux utiliser flash.sampler.getSize en mode debug
perso j'utilise ca
----
package
{
import flash.sampler.getSize;
import flash.utils.getQualifiedClassName;
public var size:Function = function( o:* ):void
{
var n:String = getQualifiedClassName( o );
var s:Number = getSize( o );
var b:String = "byte";
if( s > 0 ){ b += "s" };
if( s == 4 )
{
n = "("+n+")";
s = 0;
}
trace( n + " = " + s + " "+b );
}
}
----
size( bmp );
petite note au passage, à partir du moment où un slot est définit en
AS3,
meme si on le passe a null, le slot contient quand meme 4 bytes
sinon pour vraiment bien tester la mémoire il faut 2 trucs
1. un point d'entrée de départ
cad un System.totalMemory qui est pris avant que toutes images soit
chargées
et apres tu compares toujours le System.totalMemory courrant avec ce
point d'origine
2. une diff de la memoire entre 2 chargements d'images
exemple:
je load une image, et sur le onclick je la décharge
j'ai
----
private function onImage1Click( event:MouseEvent ):void
{
var bmpref:DynamicBitmap = DynamicBitmap(event.target);
bmpref.removeEventListener( MouseEvent.CLICK,
onImage1Click );
removeChild( bmpref );
bmpref.destroy();
//...
----
si je commente
//removeChild( bmpref );
//bmpref.destroy();
j'obtiens:
original mem: 7.17969 MB
mem diff: 9.07813 MB
mem leak: 9.42188 MB
mem diff: 3.51953 MB
mem leak: 12.96094 MB
mem diff: 3.50000 MB
mem leak: 16.48828 MB
mem diff: 3.50781 MB
mem leak: 20.00391 MB
mem diff: 3.52344 MB
mem leak: 23.53125 MB
entre 2 "sessions" je vois bien que ajouter 1 image rajoute 3.5MB (le
meme diff)
et je vois bien le memory leak qui grossit donc de 3.5MB a chaque fois
(9.4MB, 12.9MB, 16.4MB, etc.)
et si je décommente
removeChild( bmpref );
bmpref.destroy();
j'obtiens:
original mem: 7.17969 MB
mem diff: 5.55859 MB
mem leak: 5.90234 MB
mem diff: -0.00391 MB
mem leak: 5.91797 MB
mem diff: -0.01563 MB
mem leak: 5.91406 MB
mem diff: -0.01563 MB
mem leak: 5.91016 MB
mem diff: -0.00781 MB
mem leak: 5.91016 MB
mem diff: -0.01172 MB
mem leak: 5.91016 MB
mem diff: -0.01563 MB
mem leak: 5.91016 MB
mem diff: -0.00781 MB
mem leak: 5.91016 MB
le meme leak est constant, cad il ne grossit pas continuellement
donc en fait y a pas de mem leak
la seule différence c'est entre FP9 et FP10 la taille mem est un peu
différente
et si je fais
//removeChild( bmpref );
bmpref.destroy();
c'est pareil je reste vers les 5.9MB constant
et si je fais
removeChild( bmpref );
//bmpref.destroy();
ca change, la c'est constant a 9.1MB
zwetan
--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes FCNG.
Pour envoyer un message à ce groupe, adressez un e-mail à [email protected].
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
[email protected].
Pour plus d'options, consultez la page de ce groupe :
http://groups.google.com/group/fcng?hl=fr