• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flex und AIR > Adobe AIR

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19-08-2010, 11:20   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: da
Beiträge: 143
Air 2.0 - App wird mit der Zeit immer langsamer, frisst immer mehr CPU

Hallo und guten Tag,


ich habe eine App, die ist nicht allzu sehr kompliziert und aufwändig.

Nun ist es so, wenn die App längere Zeit läuft, 1-2 Tage, wird sie so extrem langsam, dass sie nicht mehr zu benutzen ist.

Ich habe gesehen, dass wenn die App auch nichts macht, steigt die CPU Auslastung kontinuierlich an. Auch die Anzahl der Threads steigt an.

Kann es sein, dass Air irgendwo Logfiles schreibt? Oder hat jemand einen Plan, was es sonst sein könnte?


Zur Info: Kompiliert habe ich es mit der Flash CS5 IDE, es läuft auf einem MacMini, neueste Generation. Die CPU Auslastung lag anfänglich bei 10% und steigt dann langsam aber beständig an.


Ich bin dankbar für jede Idee.

Freundliche Grüsse
N
__________________
www.winterlife.com
nbuechi ist offline   Mit Zitat antworten
Alt 19-08-2010, 11:27   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 11.856
Naja, das kann viele Gründe haben. Hört sich nach einem Memory leak an... kann auch mit unsauberer Programmierung zu tun haben.
Omega Psi ist offline   Mit Zitat antworten
Alt 19-08-2010, 11:33   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: da
Beiträge: 143
Klar, es kann sein, dass ich irgendwas im Code mache, dass es immer mehr threads gibt.

Ich wollte aber mal genereller fragen, ob das AIR mässig was sein kann, oder in die Richtung.

danke
n
__________________
www.winterlife.com
nbuechi ist offline   Mit Zitat antworten
Alt 19-08-2010, 11:59   #4 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.271
Ne eigentlich nicht, also das die Auslastung der App, bzw. der Ram-Verbrauch immer mal wieder minmal steigt/sinkt hat man eigentlich bei jedem Programm. (Einfach mal den Taskmanager beobachten )


Ich vermute eher, dass es an Deinem Script liegt, sprich irgendwelche Schleifen, Listener oder oder oder ... Denke da hilft nur auskommentieren, tracen und suchen!
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 19-08-2010, 12:21   #5 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: da
Beiträge: 143
So, ich habe jetzt ein bisschen weiter geforscht in meinem Programm. Es ist so, dass der Benutzer die Möglichkeit hat einen Film abzuspielen.
Im Code sieht das so aus:

moviePlayer = new MovieView(this);
addChild(moviePlayer);

In der Klasse MovieView wird der Film geladen und alles Videotechnische gehandelt.
Nach Filmende mache ich dann:

removeChild(moviePlayer);

Nun ist es so. Wenn der Film gestartet ist, zeigt mir die Aktivitätsanzeige 3 neue Threads an. Ist der Film fertig, wird aber nur 1 von diesen 3 gelöscht. Hat jemand eine Ahnung, wie Air diese Threads handhabt? Entsteht pro Objekt ein Thread?


Danke Danke
__________________
www.winterlife.com
nbuechi ist offline   Mit Zitat antworten
Alt 19-08-2010, 12:56   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.271
Hm,

ohne mehr Code zu sehen, kann man da nicht sooo viel zu sagen. Aber ich würde mal behaupten, dass ein simples "removeChild" nicht ausreicht.
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 19-08-2010, 12:59   #7 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: da
Beiträge: 143
Wie werden denn die einzelnen Threads generiert? Beziehungsweise, wenn ein removeChild nicht ausreicht, was dann?


Hier mal die Videoklasse:

PHP-Code:
package {
        
import flash.display.*;
        
import flash.display.Stage;
        
import flash.media.*;
        
import flash.events.*;
        
import flash.text.*;
        
import flash.net.*;
        
import flash.events.MouseEvent;
        
import com.greensock.TweenLite;
        
import flash.text.Font;




    public class 
MovieView extends Sprite {
        var 
movieField:Viereck;
        public var 
vid:Video = new Video(12801024);
        var 
nc:NetConnection;
        var 
ns:NetStream;

        var 
mainReference;
        var 
pegel:Number .7;
        
        var 
infos:Einblender;
        var 
movieinfos:String;
        var 
back:BackBtn;
            var 
backtxt;
        public function 
MovieView(mainRef)
        {
            
mainReference mainRef;
            
nc = new NetConnection();
            
nc.connect(null);
            
ns = new NetStream(nc);
            
        }
        
        
        
        public function 
killTheMovie(){
            
trace("movie view says kill");
            
            
back.removeEventListener(MouseEvent.CLICKkillMovie);
            
ns.removeEventListener(NetStatusEvent.NET_STATUSnetstat);
                
removeChild(movieField);
                
removeChild(back);
                
removeChild(vid);
            
            
ns.close();
        
        }


        
        public function 
createMovieField(moviepathmovieinfobacktext){
            
movieField = new Viereck;
            
movieinfos movieinfo;
            var 
filmpfad:String moviepath;
            
backtxt backtext;
            
addChild(movieField);
            
movieField.width 1280;
            
movieField.height 1024;

            
movieField.0;
            
movieField.0;
            
vid.0;
            
vid.0;
            
this.addChild(vid);

            
vid.attachNetStream(ns);
            
ns.bufferTime 5
            
ns.play(filmpfad);
            
        
            
ns.addEventListener(NetStatusEvent.NET_STATUSnetstat);
    
        
//    mySoundTransform.volume = mainReference.pegel;
                //ns.soundTransform = mySoundTransform;
            
var netClient:Object = new Object();
            
netClient.onMetaData = function(meta:Object) {
                
trace(meta.duration);
            };    
            
ns.client netClient;
            
            
            
            
createInfoField();
        }
        
        
        public function 
createInfoField(){
            
            
            
            
            
back = new BackBtn;
            
addChild(back);
            
back.0;
            
back.0;
            var 
nam_gross movieinfos.toUpperCase();
        
            
back.einblender_txt.text nam_gross;
            
back.close_txt.text backtxt;
            
back.addEventListener(MouseEvent.CLICKkillMovie);
            
        }
        
        
        
        
        
        
        public function 
statusHandler(event:NetStatusEvent):void 
        

           switch (
event.info.code
           { 
              case 
"NetStream.Play.Stop"
                 
dispatchEvent(new Event("videoEnde")); 
                 break; 
           } 
        }
        
        
            function 
netstat(stats:NetStatusEvent) {
                
trace(stats.info.code);
                if(
stats.info.code == "NetStream.Play.Stop"){
                    
trace("this works, oh yeah, this works");
                    
mainReference.movieFinished();}
            }
            function 
killMovie(e:MouseEvent){
                
trace("kill movie");
                
mainReference.movieFinished();
            }
            
    }
    
    

__________________
www.winterlife.com
nbuechi ist offline   Mit Zitat antworten
Alt 19-08-2010, 13:19   #8 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.271
Rufst Du denn Deine "killTheMovie" Funktion auf, wenn Du das Teil kicken willst?
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 19-08-2010, 13:30   #9 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Ort: da
Beiträge: 143
genau, im normalen View mache ich

moviePlayer.killTheMovie();
removeChild(moviePlayer);


hmm, wie kann man das Objekt denn "richtiger" löschen?


UPDATE: Ich habe herausgefunden, dass wenn ich
vid.attachNetStream(ns);

auskommentiere, das Problem nicht auftaucht. Das Problem muss also irgendwo im Bereich der NetStreams sein. Ich habe aber kein removeNetStream oder ähnliches gefunden...
__________________
www.winterlife.com

Geändert von nbuechi (19-08-2010 um 13:37 Uhr)
nbuechi ist offline   Mit Zitat antworten
Alt 24-08-2010, 17:43   #10 (permalink)
Neuer User
 
Registriert seit: Jan 2003
Beiträge: 172
Bin nicht so der Pro, aber dinge "löschen", damit es der CarbageCollector dann auch mal löscht, schaffte ich mit:

Code:
removeChild(moviePlayer);
moviePlayer = null
Was NetStream angeht, versuch mal das selbe. ns=null und dann halt neu erstellen
__________________
- Portfolio

Geändert von R3PL4Y (24-08-2010 um 17:44 Uhr)
R3PL4Y ist offline   Mit Zitat antworten
Alt 18-04-2011, 17:08   #11 (permalink)
Neuer User
 
Benutzerbild von diickens
 
Registriert seit: Sep 2010
Ort: Schweiz
Beiträge: 9
Question NetStream.close()

NetStream.close()
__________________
unnötiger Traffic..
Viel spass damit :)
diickens ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Flashplayer wird immer langsamer Zett Flash CS3 Professional 2 23-03-2010 01:09
[Flash CS3] Bildershow, die immer langsamer wird der chiller Flash Einsteiger 2 13-02-2009 16:27
Skript wird immer langsamer sterlu ActionScript 2 2 28-10-2008 12:05
Wird immer langsamer ... Mali Flash 4 und Flash 5 8 13-06-2002 20:25
film wird immer langsamer! launcher Flash 4 und Flash 5 3 21-04-2002 19:22


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele