App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Java: GUI = Performancekiller?
- Ersteller mj
- Erstellt am
mj
Technische Administration, Dinosaurier, ,
- Mitglied seit
- 17.10.2000
- Beiträge
- 19.529
- Renomée
- 272
- Standort
- Austin, TX
- Mein Laptop
- 2,4kg schwer
- Prozessor
- eckig... glaub ich
- Mainboard
- quadratisch, praktisch, gut
- Kühlung
- kühler?
- Speicher
- ja
- Grafikprozessor
- auch
- Display
- viel bunt
- HDD
- ist drin
- Optisches Laufwerk
- ist auch drin (irgendwo)
- Soundkarte
- tut manchmal tuuut
- Gehäuse
- mit aufkleber!
- Netzteil
- so mit kabel und so... voll toll
- Betriebssystem
- das eine da das wo dingenskirchen halt, nech?
- Webbrowser
- so ein teil da... so grün und so
- Verschiedenes
- nunu!
Mal eine kurze Frage: Den Primzahlalgorithmus der hier im Wettbewerb gefragt ist hab ich von einer Konsolen-Applikation umgesetzt in eine GUI-Applikation, mit schönem Fenster und einfacher Bedienung.
Allerdings ist jetzt die Performance mehr als unter aller Sau. Wo er vorher weniger als 7s gebraucht hat, braucht er jetzt für die gleiche Zahl über 15s. Wie gesagt, der Algorithmus ist gleich geblieben, lediglich eine GUI wurde dem ganzen verpasst.
Gibt es dafür eine logische Erklärung? Warum ist das Programm jetzt mit GUI plötzlich weniger als halb so schnell?
Allerdings ist jetzt die Performance mehr als unter aller Sau. Wo er vorher weniger als 7s gebraucht hat, braucht er jetzt für die gleiche Zahl über 15s. Wie gesagt, der Algorithmus ist gleich geblieben, lediglich eine GUI wurde dem ganzen verpasst.
Gibt es dafür eine logische Erklärung? Warum ist das Programm jetzt mit GUI plötzlich weniger als halb so schnell?
Moin,
die gui (wenn swing) wird gemalt (swing hat kaum peer objecte)...und das wahrscheinlich im selben Thread wie dein alg. rechnet.
Zum anderen wird durch die gui sowiso auch wieder ein wenig mehr speicher/rechenleistung benötigt.
mfg
die gui (wenn swing) wird gemalt (swing hat kaum peer objecte)...und das wahrscheinlich im selben Thread wie dein alg. rechnet.
Zum anderen wird durch die gui sowiso auch wieder ein wenig mehr speicher/rechenleistung benötigt.
mfg
Sargnagel
Commodore Special
- Mitglied seit
- 31.12.2001
- Beiträge
- 477
- Renomée
- 1
Poste doch einfach mal Deinen GUI-Quellcode.Original geschrieben von D'Espice
Gibt es dafür eine logische Erklärung? Warum ist das Programm jetzt mit GUI plötzlich weniger als halb so schnell?
BoMbY
Grand Admiral Special
- Mitglied seit
- 22.11.2001
- Beiträge
- 7.468
- Renomée
- 293
- Standort
- Aachen
- Prozessor
- Ryzen 3700X
- Mainboard
- Gigabyte X570 Aorus Elite
- Kühlung
- Noctua NH-U12A
- Speicher
- 2x16 GB, G.Skill F4-3200C14D-32GVK @ 3600 16-16-16-32-48-1T
- Grafikprozessor
- RX 5700 XTX
- Display
- Samsung CHG70, 32", 2560x1440@144Hz, FreeSync2
- SSD
- AORUS NVMe Gen4 SSD 2TB, Samsung 960 EVO 1TB, Samsung 840 EVO 1TB, Samsung 850 EVO 512GB
- Optisches Laufwerk
- Sony BD-5300S-0B (eSATA)
- Gehäuse
- Phanteks Evolv ATX
- Netzteil
- Enermax Platimax D.F. 750W
- Betriebssystem
- Windows 10
- Webbrowser
- Firefox
Normalerweise hat man mit einer GUI nur Performanceprobleme, wenn man zu oft updatet. Wenn Du in jedem Schleifendurchlauf ein GUI-Update machst, ist das ein Problem. Wenn ich sowas in einem meiner Programme habe, dann mache ich mir einen Zähler und updatete das GUI dann z.B. nur in jedem tausendstem Durchlauf.
Könnte aber auch z.B. sein, dass bei Dir vieleicht ein Event-Handler zu oft aufgerufen wird - Da kann ich mich meinem Vorredner nur anschließen: Schwer zu sagen ohne es zu sehen.
m.f.g.
BoMbY
PS: Achja, das o.g. mit dem Thread könnte auch sein, versuch doch einfach mal Deine Berechnung in einen anderen Thread zu packen.
Könnte aber auch z.B. sein, dass bei Dir vieleicht ein Event-Handler zu oft aufgerufen wird - Da kann ich mich meinem Vorredner nur anschließen: Schwer zu sagen ohne es zu sehen.
m.f.g.
BoMbY
PS: Achja, das o.g. mit dem Thread könnte auch sein, versuch doch einfach mal Deine Berechnung in einen anderen Thread zu packen.
mj
Technische Administration, Dinosaurier, ,
- Mitglied seit
- 17.10.2000
- Beiträge
- 19.529
- Renomée
- 272
- Standort
- Austin, TX
- Mein Laptop
- 2,4kg schwer
- Prozessor
- eckig... glaub ich
- Mainboard
- quadratisch, praktisch, gut
- Kühlung
- kühler?
- Speicher
- ja
- Grafikprozessor
- auch
- Display
- viel bunt
- HDD
- ist drin
- Optisches Laufwerk
- ist auch drin (irgendwo)
- Soundkarte
- tut manchmal tuuut
- Gehäuse
- mit aufkleber!
- Netzteil
- so mit kabel und so... voll toll
- Betriebssystem
- das eine da das wo dingenskirchen halt, nech?
- Webbrowser
- so ein teil da... so grün und so
- Verschiedenes
- nunu!
Die GUI wurde erstellt mit VEP/Eclipse und ich muss an dieser Stelle zugeben, dass ich bisher mit GUI und JAVA noch nicht viel Erfahrung habe. Bisher zwei Tage experimentieren und lesen, immerhin kapier ich jetzt die Grundprinzipien. Was ich noch lernen will ist wie man ein Fenster schließt und einen Wert zurückgibt und noch vieles mehr.
Der Quellcode für die GUI kann hier gefunden werden:
http://home.in.tum.de/~jungowsk/sw/java/PrimeApp
Der Quellcode für die GUI kann hier gefunden werden:
http://home.in.tum.de/~jungowsk/sw/java/PrimeApp
BoMbY
Grand Admiral Special
- Mitglied seit
- 22.11.2001
- Beiträge
- 7.468
- Renomée
- 293
- Standort
- Aachen
- Prozessor
- Ryzen 3700X
- Mainboard
- Gigabyte X570 Aorus Elite
- Kühlung
- Noctua NH-U12A
- Speicher
- 2x16 GB, G.Skill F4-3200C14D-32GVK @ 3600 16-16-16-32-48-1T
- Grafikprozessor
- RX 5700 XTX
- Display
- Samsung CHG70, 32", 2560x1440@144Hz, FreeSync2
- SSD
- AORUS NVMe Gen4 SSD 2TB, Samsung 960 EVO 1TB, Samsung 840 EVO 1TB, Samsung 850 EVO 512GB
- Optisches Laufwerk
- Sony BD-5300S-0B (eSATA)
- Gehäuse
- Phanteks Evolv ATX
- Netzteil
- Enermax Platimax D.F. 750W
- Betriebssystem
- Windows 10
- Webbrowser
- Firefox
Hi,
also was fällt mir an Deinem Code auf:
1. Du benutzt die SWT, wenn Du das ganze mit der AWT machst, sollte es schneller sein.
2. Statt dem ActionListener kannst Du auch mal versuchen nur den mouseClicked Event abzufragen (Events -> Add Events -> Mouse - MouseAdapter -> mouseClicked)
3. Und der Übersichtlichkeit halber würde ich die Funktionalität aus der GUI-Klasse auslagern (halt irgendwie nach der Model-View-Controller Design Pattern).
4. Und wie oben schon erwähnt kann es dann immer noch zu Problemen kommen, weil die GUI und die Berechnung im gleichen Thread laufen.
m.f.g.
BoMbY
also was fällt mir an Deinem Code auf:
1. Du benutzt die SWT, wenn Du das ganze mit der AWT machst, sollte es schneller sein.
2. Statt dem ActionListener kannst Du auch mal versuchen nur den mouseClicked Event abzufragen (Events -> Add Events -> Mouse - MouseAdapter -> mouseClicked)
3. Und der Übersichtlichkeit halber würde ich die Funktionalität aus der GUI-Klasse auslagern (halt irgendwie nach der Model-View-Controller Design Pattern).
4. Und wie oben schon erwähnt kann es dann immer noch zu Problemen kommen, weil die GUI und die Berechnung im gleichen Thread laufen.
m.f.g.
BoMbY
Crashman
Grand Admiral Special
Welche GUI Frameworks gibt es für Java eigentlich? Die Standardanwendungen sehen ja eher karg aus und sind obendrein noch ewig langsam.
MfG
MfG
StrgAltEntf
Admiral Special
Möglicherweise kommt der Berechnung der EventDispatchThread in die Quere (oder die GarbageCollection, die ja bei ner GUI auch etwas mehr zu tun hat).
Was helfen könnte (!), wäre, die Berechnung in einen eigenen Thread auszulagern und diesem Thread eine hohe Priorität zu geben (Java API Doku zu Thread ). Während der Berechnung dürfte die GUI dann aber vermutlich recht zäh reagieren.
@Crashman: AWT, Swing und SWT sind die die ich kenne, aber es gibt vermutlich noch andere mit eher wenig Bedeutung in der Praxis.
Was helfen könnte (!), wäre, die Berechnung in einen eigenen Thread auszulagern und diesem Thread eine hohe Priorität zu geben (Java API Doku zu Thread ). Während der Berechnung dürfte die GUI dann aber vermutlich recht zäh reagieren.
@Crashman: AWT, Swing und SWT sind die die ich kenne, aber es gibt vermutlich noch andere mit eher wenig Bedeutung in der Praxis.
mj
Technische Administration, Dinosaurier, ,
- Mitglied seit
- 17.10.2000
- Beiträge
- 19.529
- Renomée
- 272
- Standort
- Austin, TX
- Mein Laptop
- 2,4kg schwer
- Prozessor
- eckig... glaub ich
- Mainboard
- quadratisch, praktisch, gut
- Kühlung
- kühler?
- Speicher
- ja
- Grafikprozessor
- auch
- Display
- viel bunt
- HDD
- ist drin
- Optisches Laufwerk
- ist auch drin (irgendwo)
- Soundkarte
- tut manchmal tuuut
- Gehäuse
- mit aufkleber!
- Netzteil
- so mit kabel und so... voll toll
- Betriebssystem
- das eine da das wo dingenskirchen halt, nech?
- Webbrowser
- so ein teil da... so grün und so
- Verschiedenes
- nunu!
Hmm... ich hab da ganze jetzt in einen eigenen Thread ausgelagert und gebracht hat es - exakt, garnichts. Immer noch doppelt so langsam wenn in GUI aufgerufen wie wenn in CLI aufgerufen
Ähnliche Themen
- Antworten
- 0
- Aufrufe
- 52K
- Antworten
- 0
- Aufrufe
- 27K