Avatar billede Slettet bruger
20. oktober 2009 - 11:11

Flash memoryproblem

Hej eksperter.

Jeg har et åndssvagt problem med Flash as3. Min SWF-fil bliver gradvist større og jeg fatter ikke, hvad årsagen er.
Projektet går ud på, at en række videoklip indlæses i serie vha. en XML-fil, der regelmæssigt indlæses og overskriver den forrige.

Eksempel:

<?xml version="1.0" encoding="utf-8"?>
<dataliste>
  <budskab aktiv="ja">Dette er budskabet</budskab>
  <flashfilm aktiv="ja" filmurl="spot09release.swf" visrulletekster="ja" />
  <flashfilm aktiv="ja" filmurl="trailer.swf" visrulletekster="ja" />
  <reklameblok aktiv="ja" filmurl="reklame.swf" visrulletekster="nej" />
</dataliste>

Det er de to "flashfilm"-tags, der i dette tilfælde skiftes til at køre.
Klippene er 3-5 MB store og interessant nok er det ca. størrelsen, det brugte hukommelsesområde forøges med ved hvert gennemløb.
2 metoder: naestefilm() og startLoad(filnavn) sørger for at indlæse filmene. Ved hvert gennemløb bliver et movieclip oprettet og fjernet igen - men tilsyneladende uden effekt.

De vigtigste dele af koden ser sådan ud - og jo, i øvrigt: Konstruktøren kalder metoden "opstart", der initialiserer variabler m.m. Her bliver også alle loaderklasser sat for at forsøge at finde årsagen til memoryproblemet.

private function opstart() {
  rulletekst_mc.visible = false; // Start i udgangspunktet med at gøre budskabet usynligt
  // Intervalmæssigt skal XML-listen genindlæses for at checke for ændringer
  genindlaesningstimer = new Timer(100000);
  genindlaesningstimer.addEventListener("timer", genindlaesXMLfil);
  genindlaesningstimer.start();
           
  sammenligner = new URLLoader();
  sammenligner.addEventListener(Event.COMPLETE, sammenlignNu);
  sammenligner.addEventListener(IOErrorEvent.IO_ERROR, sammenligningsfejl);
           
  dataloader = new URLLoader();
  dataloader.addEventListener(Event.COMPLETE, listeIndlaest);
  dataloader.addEventListener(IOErrorEvent.IO_ERROR, indlaesningsfejl);

  mLoader = new Loader();
  mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
  mLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, fejl);
           
  scroller = new Timer(hastighed);
  scroller.addEventListener("timer", modvenstre);
  scroller.start();
           
  reklametimer = new Timer(reklameinterval);
  reklametimer.addEventListener("timer", indsaetReklame);
           
  filmplaceholder_mc = new Filmplaceholder();
           
  indlaesDataliste(dataliste);
}

public function naestefilm() {
  removeChild(filmplaceholder_mc);
  trace("Vis næste film");
  if (filmpegepind < listen.flashfilm.length()-1) {
    //trace("Vis næste film nu!");
    filmpegepind++;
  } else {
    filmpegepind = 0;
  }
  //trace("Aktuel liste: "+listen);
  startLoad(listen.flashfilm[filmpegepind].@filmurl);
}

private function startLoad(filnavn) {
  // INDLÆS EN EKSTERN FILM
  filmplaceholder_mc.x = 400;
  filmplaceholder_mc.y = 400;
  addChild(filmplaceholder_mc);
  swapChildren(rulletekst_mc, filmplaceholder_mc);
  if (listen.flashfilm[filmpegepind].@aktiv == "ja") {
    // Hvis den aktuelle film skal vises...
    mRequest = null;
    mRequest = new URLRequest(filnavn);
    mLoader.load(mRequest);
  } else {
    // Hvis den aktuelle film ikke er aktiv, skal funktionen kalde naestefilm, der igen kalder denne funktion - men forhåbentlig med nyt filnavn
    naestefilm();
  }
}

Kan nogen hjælpe?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester