| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #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 |
| | |
| | #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: Also besser direkt: PHP-Code: 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. |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Oct 2006
Beiträge: 31
|
...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 |
| | |
| | #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. |
| | |
| | #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 |
| | |
| | #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 )
|
| | |
| | #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 |
| | |
| | #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 |
| | |
| | #10 (permalink) |
| Neuer User Registriert seit: Oct 2006
Beiträge: 31
|
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 |
| | |
| | #11 (permalink) |
| Flash-Designer 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! |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ä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 |