Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1812 connectés 

  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  Optimisation mémoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation mémoire

n°1261704
incognito1​3
Posté le 08-12-2005 à 14:10:34  profilanswer
 

Salut all,  :hello:  
 
J'ai réalisé mon Cv Flash mais j'ai un soucis d'optimisation mémoire.
Pour bien comprendre, je vous invite a le visiter : www.13flo.com
 
A chaque changement de page (invoquée par LoadMovieNum), la mémoire vive occupée par l'application augmente de 2 Mo... (c'est ce que je constate dans le gestionnaire des taches d'XP). Donc au bout d'un certain nombre de changement de page, la fluidité d'animation en prend un coup...
 
Voila la fonction qui s'occupe d'appeller la page :
 

Code :
  1. function boutons(acharger) {
  2. nextlevel += 1;
  3. _root.level2delete = nextlevel-1;
  4. var image:MovieClip = this.createEmptyMovieClip("image"+nextlevel, nextlevel);
  5. var mcLoader:MovieClipLoader = new MovieClipLoader();
  6. var listener:Object = new Object();
  7. listener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void  {
  8.  progression = (bytesLoaded/bytesTotal)*100;
  9.  loading = Math.round(progression)+" %";
  10.  barreloadover._height = Math.round(progression)*2;
  11.  if (bytesLoaded == bytesTotal) {
  12.   clearInterval(interval.id);
  13.  }
  14. };
  15. mcLoader.addListener(listener);
  16. mcLoader.loadClip(acharger, image);
  17. var interval:Object = new Object();
  18. interval.id = setInterval(checkProgress, 3, mcLoader, image, interval);
  19. function checkProgress(mcLoader:MovieClipLoader, image:MovieClip, interval:Object):Void {
  20.  var progress:Object = mcLoader.getProgress(image);
  21. }
  22. }


 
Vous me direz que c'est parceque "j'empile" mes pages.. mais non ! Une fonction s'occupe de supprimer la page masquée par la nouvelle. Et cela marche j'en suis sur.
La voila, appellée quand le masque a finit son boulot :
 

Code :
  1. function supprimer_clip(id) {
  2. if (id != 0) {
  3.  removeMovieClip("container"+id);
  4. }
  5. }


 
 
Si quelqu'un est interressé par ce problème, je pourrai envoyer le fla par mp...
 
Merci beaucoup à celui qui m'aidera ou me proposera une solution mieux adaptée  :love:


Message édité par incognito13 le 08-12-2005 à 14:25:00
mood
Publicité
Posté le 08-12-2005 à 14:10:34  profilanswer
 

n°1261761
mechkurt
Posté le 08-12-2005 à 14:53:30  profilanswer
 

j'ai pas le temps de regarder dans le detail mais tu n'as pas besoin de recreer la classe MovieCliploader a chaque appui sur le ton bouton a charger, declare la qu'une fois et envoie des parametres plutot, si tu veux m'envoyer le fla mon adreese mail et quelque part dans mon CV sur le site du memoire (cf. signature)


---------------
D3
n°1261779
incognito1​3
Posté le 08-12-2005 à 15:00:36  profilanswer
 

Ok je vais essayer ca merci ;)

n°1261921
mechkurt
Posté le 08-12-2005 à 16:56:12  profilanswer
 

je repond à ton mail ici, ca peut servir a d'autres  :D  
 
>Salut!
Tchô!
 
>Je suis incognito13 du forum.hardware ;)
moi c'est Mechkurt ;)
 
>Tu m'as pas conseillé de ne pas recréer la classe MovieClipLoader a  
>chaque appui de bouton mais je t'avoue que cette notion de classe  
>n'est pas très claire dans mon esprit.
>J'ai trouvé ce script dans l'aide et je l'ai adapté a ma sauce  
>jusqu'à ce que ca marche.
>Donc en fait si je comprend bien, c'est que je crée pusieurs fois la  
>meme classe pour rien ?
>Pourrais-tu me montrer ce que tu aurais fais, si ca te dérange pas  
>bien sûr.
>
>Voila le script :
>--------------------------------------------------------------
>
>function boutons(acharger) {
>    nextlevel += 1;
>    _root.level2delete = nextlevel-1;
>      var image:MovieClip =  
>this.createEmptyMovieClip("image"+nextlevel, nextlevel);
>      var mcLoader:MovieClipLoader = new MovieClipLoader();
>    var listener:Object = new Object();
>    listener.onLoadProgress = function(target:MovieClip,  
>bytesLoaded:Number, bytesTotal:Number):Void  {
>              progression = (bytesLoaded/bytesTotal)*100;
>        loading = Math.round(progression)+" %";
>        barreloadover._height = Math.round(progression)*2;
>              if (bytesLoaded == bytesTotal) {
>            clearInterval(interval.id);
>        }
>    };
>    mcLoader.addListener(listener);
>    mcLoader.loadClip(acharger, image);
>    var interval:Object = new Object();
>    interval.id = setInterval(checkProgress, 3, mcLoader, image,  
>interval);
>    function checkProgress(mcLoader:MovieClipLoader,  
>image:MovieClip, interval:Object):Void {
>        var progress:Object = mcLoader.getProgress(image);
>
>    }
>}
>--------------------------------------------------------------
 
a priori une fois déclaré ta class MovieClipLoader, comme tu lui passe en parametre ce que tu veux charger ta pas besoin de la mettre dans ta fonction bouton, car la a chaque fois que tu clic sur un bouton ca appelle la fonction bouton qui crée une nouvelle classe MovieclipLoader (ceci dit comme il la crée avec le même nom ca devrait ecraser l'ancienne donc je ne pense pas que to PB d'occupation mémoire viennent de la...)
 
je sais pas si je suis clair mais en gros: si tu mets le bloc de declaration de ta classe MovieclipLoader (tout sauf mcLoader.loadClip(acharger, image); qui bien sur doit rester dans la fonction bouton) au dessus du bloc fonction bouton ca devrait marcher aussi bien...
 
pour ton PB de memoire je vois deux possibilité:
=>soit il ne supprime pas les pages (j'ai pas compris comment est appellé ta function:

Code :
  1. function supprimer_clip(id) {
  2. if (_level0.nextlevel>2 && id != 0) {
  3.  removeMovieClip("container"+id);
  4. }
  5. }


mais deja ton occurence crée s'appelle ("image"+id); alors je suis pas sur que ca fonctionne pour verifier fait un:

Code :
  1. function supprimer_clip(id) {
  2.    if (_level0.nextlevel>2 && id != 0) {
  3.       if("image"+id) {
  4.           removeMovieClip("image"+id);
  5.           if("image"+id) {
  6.               trace("image"+id+" existe encore!" );
  7.           }else {
  8.               trace("image"+id+" supprimé!" );
  9.           }
  10.       }
  11.    }
  12. }


=>deuxiemem possibilité, c'est les setInterval du checkProgress que tu ne supprime pas et qui te bouffe des ressources (la ca devrait ramer et non pas prendre plus de memoire mais va savoir...)
vu que tu te coltine une class MovieClipLoader utilise la a fond et passe plutot par le gestionnaire onLoadProgress dédié a ca (et qui marche tres bien)
http://livedocs.macromedia.com/fla [...] 02546.html
si tu tiens vraiment a tes setInterval veille bien a faire des clearInterval quand tu en as plus besoin (et a faire un delete en plus ca ne mange pas de pain ;) )
 
>Je t'ai aussi mit la source la :
//ligne supprimé je suppose que t'as pas plus que ca que googlebot scan ton repertoire de stockage  ;)  
au fait c'était source.rar et pas source.fla mais j'ai trouvé quand même...
 
>Jte remercie d'avance ! ;)
de rien
 
>Florian, étudiant en Services et Réseaux de Comm. à Saint-Raphaël  
>(Var).
Matthieu bénévole sur hardware.fr


---------------
D3
n°1262899
incognito1​3
Posté le 09-12-2005 à 17:39:26  profilanswer
 

Salut et merci beaucoup mechkurt !
 
Je m'occupe de ca des que j'ai le temps et je post la solution pour ceux a qui ca pourrait servir !
 
See ya!

n°1264650
alpseb
Posté le 12-12-2005 à 16:10:11  profilanswer
 

je sais pas si t'as déja résolu ton truc...
mais je crois bien que la méthode "removeMovieClip" le dégage de la scene mais en le gardant en mémoire...
essaie de faire un unloadMovie à la place... ca devrais le décharger completemnet de l'animation et donc de la ram...

n°1266592
incognito1​3
Posté le 14-12-2005 à 17:30:43  profilanswer
 

Salut,
 
en fait tu avais bien raison mechkurt. c'est ma fonction de suppression des clips maskés qui marchait pas. En fait je passais mal la valeur "id" du cli a supprimer. Donc la ca donne ca :
 

Code :
  1. function supprimer_clip(id) {
  2. id -= 2;
  3. removeMovieClip("_level0.image.image"+id);
  4. }


 
A la premiere image clé du clip chargé :
 

Code :
  1. id = _parent._parent._parent.nextlevel;


 
A la derniere :
 

Code :
  1. _parent._parent._parent.supprimer_clip(id);


 
 

Citation :

je crois bien que la méthode "removeMovieClip" le dégage de la scene mais en le gardant en mémoire...


 
 :non: Spa vrai  :)  
 
Merci pour votre aide !  :hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  Optimisation mémoire

 

Sujets relatifs
liberation memoire[VBS][SOURCE] Optimisation du Path
[Delphi] Impossible de liberer la mémoire d´un gifpb mise en memoire tampon d'une video
optimisation : echo ou htmloptimisation
Singleton dans une DLL et espace mémoire propre[SQL] Nombre de champs, optimisation
Optimisation du temps d'execution d'une requete sous oracle[DELPHI] Optimisation du code & gestion de la mémoire
Plus de sujets relatifs à : Optimisation mémoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR