Zurück   Flashforum > Flex und AIR > Adobe AIR

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-03-2011, 13:06   #1 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 31
anwendung wird langsam

Hi,

ich hab eine allgemeine Frage.
Welche Gründe gibt es dafür, das Air-Anwendungen langsam werden können...

Mein derzeitiges Projekt hat zwei Stellen an denen sie langsam wird.
Ich hab schon etwas "speed" dadurch dazu bekommen das ich alle meine verbindungen zur Datenbank auch wieder schließe wenn sie nicht mehr gebraucht wird :-)
Trotzdem läuft das Ganze nicht immer gleich schnell.
An einer Stelle "klippe" ich einen Film an die Maus... kann es daran liegen???

stage.addEventListener(MouseEvent.MOUSE_MOVE,zieh) ;
function zieh(e:MouseEvent):void
{
if (Object(root).checker.text == 'bewegen')
{
var dasx = mouseX + 10;
var dasy = mouseY + 10;
DieserFilmNeu.x = dax;
DieserFilmNeu.y = day;
}
}


Was gibt es noch grundsätzlich für Gründe warum eine AIR Anwendung langsam werden kann...???

Danke schon mal für Euer Feedback.

Jan
Jankee ist offline   Mit Zitat antworten
Alt 01-03-2011, 13:21   #2 (permalink)
Neuer User
 
Registriert seit: Oct 2007
Beiträge: 434
Also diesen Zugriff würd ich mal generell so vermeiden:

Object(root).checker.text

Da wirst du ja wohl irgendwo ne Variable für haben und oder anlegen können.

Ich weiß nicht ob sich da n Tippfehler bei dir eingeschlichen hat, aber ich vermute mal, dass der Rest vom Listener so aussehen soll:
PHP-Code:
var dasx mouseX 10;
var 
dasy mouseY 10;
DieserFilmNeu.dasx;
DieserFilmNeu.dasy
Da hast du direkt mal zwei Bremsen eingebaut, erstens haben deine Variablen keine Typ Deklarationen, sprich Flash muss immer ein Best-Guess-Casting veranstalten. Zweitens speicherst du einen Zwischenwert um ihn dann direkt wieder ner Property zuzuweisen. C Compiler hauen sowas in der Regel zusammen, Flash imho nicht.

Also besser direkt:
PHP-Code:
dieserFilmNeu.mouseX 10
dieserFilmNeu.mouseY 10
Ich weiß nicht, ob man durch diese Kleinigkeiten wirklich signifikante Verzögerungen produzieren kann, unsauber ist es allemmal. Wo wir grad beim Thema sind, Variablen schreibt man klein, nur Klassennamen groß.

Code innerhalb eines MouseMove sollte auch so klein wie möglich gehalten werden, da er unter Umständen sogar häufiger aufgerufen wird als ein EnterFrame (zB. bei permantem schnellem Bewegen der Maus).

Daher würde ich auch den String vergleich mit dem Textfeld nicht in den MouseMove packen. Lieber das Textfeld bei Change überprüfen ob "bewegen" drinsteht, wenn ja MouseMove Listener adden, wenn nicht removen.
Lukas78 ist offline   Mit Zitat antworten
Alt 01-03-2011, 16:30   #3 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 31
Hi Lukas,

danke das sind doch schon mal ein paar Hinweise mit denen ich weiterarbeiten kann...!

1000 Dank

Jan
Jankee ist offline   Mit Zitat antworten
Alt 02-03-2011, 09:11   #4 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 31
Unhappy Datenbank Verbindung Öffnen und Schliessen...

...soo hab mir die Nacht um die Ohren geschlagen um festzustellen, das die Mausverfolgung NICHT das Problem zu sein scheint, warum meine Anwendug immer mal sehr langsam wird...

Ich denke es liegt vielleicht doch eher an den Datenbankabfragen...

Entweder mache ich einen Fehler beim Schliessen der jeweiligen Verbindung

ÖFFNEN:
var conn:SQLConnection = new SQLConnection();
conn.addEventListener(SQLEvent.OPEN, openHandlerCheck);
conn.addEventListener(SQLErrorEvent.ERROR, errorHandlerCheck);

var folderCheck:File = File.applicationStorageDirectory;
var dbFileCheck:File = folderCheck.resolvePath("meineDB.db");
conn.openAsync(dbFileCheck, SQLMode.CREATE);

function openHandlerCheck(event:SQLEvent):void
{
trace("Datenbank geöffnet");
}
function errorHandlerCheck(event:SQLErrorEvent):void
{
trace("Error", event.error.message);
trace("Details", event.error.details);
}

SCHLIESSEN:
conn.close();



oder mein Grundsystem verursacht das Problem:
Ich öffne am Anfang der Anwendung eine Verbindung zur Datenbank, mit der ich von der Hauptzeitleiste aus immer mal wieder auf verschiedene (teilweise auch gleiche) Tabellen in der Datenbank zugreife. Erst ganz am Ende, sozusagen beim Schliessen der Anwendung schließe ich die Verbindung wieder.
Zwischendurch greife ich mit anderen Verbindungen aus MovieClips, die erst später auf der Hauptbühne erscheinen auf die selbe Datenbank zu...
Könnte das der Fehler sein?
Soweit ich probiert habe kann ich nicht in einem Clip der später dazu kommt, dieselbe SQLConnection (die von der Hauptzeitleiste) benutzen - oder? Wäre das überhaupt schlau?? :-)
Sollte ich vielleicht die Verbindung von der Hauptbühne zur Datenbank lieber immer unterbrechen, wenn ein Vorgang abgeschlossen ist und wieder aufbauen, wenn der nächste Schritt erfolgen soll???

....oder gibt es noch andere Ideen warum eine Air anwendung den Rechner langsam machen kann...???

Dreh langsam durch, alles ist fertig, nur das Tempo kann ich niemandem zumuten... :-)

DANKE
Jan
Jankee ist offline   Mit Zitat antworten
Alt 02-03-2011, 09:40   #5 (permalink)
Neuer User
 
Registriert seit: Oct 2007
Beiträge: 434
Wenn du aus verschiedenen Klassen (also in deinem Fall MovieClips) auf die verbindung zugreifen möchtest, würde ich zusehen, dass du die ganze Datenbank Kommunikation in eine eigene Klasse packst, diese einmal instanzierst und die Referenz darauf an deine MovieClips weitergibts.

Läuft denn dein Speicher voll? Oft ist das Problem, dass Klassen, die nicht mehr auf der stage sind und nicht mehr verwendet werden, noch durch EventListener oder Variablen referenziert sind, und somit nicht durch den GarbageCollector entfernt werden.

Sowas kann man eigentlich ganz gut mit dem Profiler überprüfen, den gibts meines Wissens nach aber nur bei der Pro Version des Flash/Flex Builders.
Lukas78 ist offline   Mit Zitat antworten
Alt 02-03-2011, 10:22   #6 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 31
Hi Lukas,

erst mal danke für deine Antwort.
Bin kein Profi und bin mir nicht sicher ob ich alles verstanden hab...

1) wäre es möglich, das du mir (anhand meines Beispiels) eine Klasse für die Datenbank-Kommunikation bastelst? Ich glaube (hoffe) die Referenz für den Movie-Clip bekomme ich dann hin...

2) ich glaube ich hab grob verstanden was du meinst mit: "Oft ist das Problem, dass Klassen, die nicht mehr auf der stage sind und nicht mehr verwendet werden, noch durch EventListener oder Variablen referenziert sind, und somit nicht durch den GarbageCollector entfernt werden". Wenn ich es richtig verstanden habe "reinigt" der GarbageCollector den Film grundsätzlich von unnötigem. nicht so bei EventListener oder Variablen die noch referenziert sind.

3) ...und wie stelle ich es an, das ich über den Profiler checke, ob dies der Fall ist?

Du siehst schon, ich bin KEIN Profi. Ich hangel mich von einer Lösung zur nächsten. Hat bisher ganz gut geklappt und macht auch reichlich Spass, aber bei diesem Problem bin ich einfach nicht weiter gekommen...

DANKE schon mal...!!

Jan
Jankee ist offline   Mit Zitat antworten
Alt 02-03-2011, 10:37   #7 (permalink)
Neuer User
 
Registriert seit: Oct 2007
Beiträge: 434
zu 1) .. ist schon möglich, ginge aber für mich über die normale Hilfestellung im Forum hinaus, macht dann für dich auch mehr sinn, wenn du es dir selber erarbeitest, als wenn dus nur vorgekaut bekommst

zu 2) genau der GarbageCollector ist in Flash für das zuständig, was in anderen Programmiersprachen der Destrucor macht, sprich er gibt nicht mehr benötigten Arbeitsspeicher frei, damit er diesen aber als nicht mehr benötigt identifizieren kann, darf das entsprechende Objekt halt keine EventListener mehr besitzten, und durch keine Variabel referenziert sein.

zu 3) hab nur die Basis version und den Profiler nicht mehr genutzt, seit bei mir die Testphase rum war. Aber da kann dir die Hilfe sicherlich helfen (deshalb heißt die wohl auch so )
Lukas78 ist offline   Mit Zitat antworten
Alt 02-03-2011, 12:27   #8 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 31
Hi Lukas,

grundsätzlich "fummel" ich mich gerne in so Sachen rein, deshalb werde ich mir das schon zurechtbasteln...

Kannst du mir aber bitte noch mal eine Einschätzung geben, ob ich damit tatsächlich an dem Hauptproblem dran sein könnte...

Und macht es einen Unterschied, ob ich die Verbindung zur Datenbank dauerhaft offen halte oder immer wieder schliesse und öffne...?

Gibt es noch andere Gründe warum AIR Anwendungen viel Arbeitsspeicher besetzen können, die ich vielleicht noch mal abchecken könnte???

Gruss
Jan
Jankee ist offline   Mit Zitat antworten
Alt 02-03-2011, 12:37   #9 (permalink)
Neuer User
 
Registriert seit: Oct 2007
Beiträge: 434
Kann dir da ehrlich gesagt keine genau Einschätzung geben, hab noch nicht soviel mit Datenbanken und Flash gearbeitet. Mehrere geöffnete Verbindungen klingt aber danach, als könnten diese dafür verantwortlich sein, insbesondere wenn du diese immer wieder über new erstellst.

Wenn deine Anwendung auch ohne die Datenbankabfragen lauffähig ist, könntest du diese auch zunächst auskommentieren und testen ob das Problem weiterhin besteht. So als Vorschlag zur Eingrenzung.

Viel Erfolg
Lukas78 ist offline   Mit Zitat antworten
Alt 04-03-2011, 17:29   #10 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 31
Angry

Hi Lukas,

hoffe du liest dies noch, weil ich mich nach deinen Hinweisen noch mal hingesetzt hab und ein paar Dinge durchproboiert habe und gerne noch mal hören würde was du dazu sagst...

Ich habe mal den Taskmanager laufen lassen während ich die Anwednung aufgerufen hatte... Taskmanagaer sagt "alles gut", Anwendung läuft trotzdem superlangsam.
Könnte ein Hinweis sein, das es nicht die Geschichte mit dem GarbageCollector ist... oder?

Ich hab auch mal alle Datenbankverbindungen gekappt - hat auch nix gebracht.

Dann hab ich mal den Anfang (ca 80%) rausgenommen und nur die "Schlusseite" (da wo der Mausverfolger drin ist und wo es am meidsten "ruckelt") laufen lassen - läuft supergut, sogar wenn ich hier die später benötigte Datenbank-Anbindung wieder "einschalte"...

Dann hab ich nach und nach Vorne wieder Teile reingebaut, und nach und nach wirds am Ende wieder langsamer...

Wäre für mich wieder ein Hinweis dafür das sich "im Laufe der Anwendung" doch irgendwo "Müll" ansammelt, der zwar die Anwendung langsamer macht, nicht aber den Arbeitsspeicher belastet... isch werd noch jeck...

Kanns du mit dem ganzen was Anfangen???

Dankbar für jede Idee...
Gruss
Jan
Jankee ist offline   Mit Zitat antworten
Alt 04-03-2011, 17:58   #11 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Vielleicht liegt der Grund für den Performanceinbruch auch garnicht in der Garbage-Collection, sondern in einer "normalen" Überforderung des Players?!

Hast Du vielleicht einfach zu viele (halbtransparente) Objekte im Hintergrund liegen o.ä.?
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist gerade online   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
mp3 wird zu langsam abgespielt alfo ActionScript 2 8 27-06-2006 14:15
CD-Anwendung zu langsam froesi Flash MX 2004 3 22-11-2005 09:42
so langsam wird´s Chrissi ActionScript 1 6 27-01-2002 19:13
Hilfe!! Film wird zu langsam schaumann Flash 4 und Flash 5 0 24-08-2001 09:35


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele