Performance SWT ???

Status
Nicht offen für weitere Antworten.

mede

Mitglied
Ich benütze in meinem GUI eine eigene Tabelle mit SWT Composites welche wiederum Text und Bilder enthalten.
Da ich mehrere 100 dieser Composites verwende frage ich mich ob es besser währe Text und Bilder selber in einem PaintListener mit Hilfe des GC zu zeichnen, anstelle dafür Labels zu verwenden, welche mit einem null Layout im Composite positioniert sind ???

Ist ein merklicher Unterschied (Performance, Resources) vorhanden ob man Text und Bild mit einem Label oder direkt über die GC zeichnet ???


-----------------------------Variante mit Subelemte (LABEL)
..................................
COMPOSITE................
------------.... ----------
| LABEL | ... | LABEL |
----------- .... ---------
.................. -----------
...................| LABEL |
...................-----------
..................................

..................................
COMPOSITE................
------------.... ----------
| LABEL | ... | LABEL |
----------- .... ---------
.................. -----------
...................| LABEL |
...................-----------
..................................

... (mehrere 100 Wiederholungen)

-------------------------------Variante mit PaintListener
........................................
COMPOSITE......................
gc.drawImage gc.drawText
.......................................
..................... gc.drawtext
.......................................
.......................................

........................................
COMPOSITE......................
gc.drawImage gc.drawText
.......................................
..................... gc.drawtext
.......................................
.......................................

... (mehrere 100 Wiederholungen)

WELCHE VARIANTE IST BESSER (SCHNELLER) ???
 

byte

Top Contributor
Werden denn zur Laufzeit immer alle Daten aktualisiert oder jeweils immer nur ein Teil der Daten? Letzteres ist natürlich beim Zeichnen über den GC etwas schwieriger umzusetzen. Dann müsstest Du Dir einen geeigneten Mechanismus überlegen, wie Du immer nur die Teile im Canvas neu zeichnest, die sich geändert haben. Prinzipiell ist es natürlich möglich. Auf jeden Fall darauf achten, nicht direkt aufs Canvas zu zeichnen, sondern zunächst in ein Image und danach das Image aufs Canvas (Double Buffering). Wenn Du jedes Mal alles neu zeichnest, ist es fraglich, ob das dann noch performanter ist.

Ich würds erstmal mit Widgets lösen (weils schneller umzusetzen ist) und falls das nicht performant genug ist, kannst Du immernoch den alternativen Weg über Canvas und GC gehen.


Edit: Grade gesehen, dass Du auf die Composites zeichnen willst. Ist natürlich auch eine Lösung, aber ich denke, das wird vielleicht sogar langsamer sein als mit Labels. Aber am performantesten wirds sein, ein großes Canvas zu nehmen.
 

mede

Mitglied
Es werden immer alle Daten eines Composite verändert. Somit muss nicht teilweise neu gezeichnet werden.

jedoch habe ich Funktionen implementiert welche das Bild und das Label zum Teil bei MouseOver Aktionen verändert. vergrösser, verschiebt. Dies währe dann ein wenig schwierig wenn man es selber zeichnen müsste. Bzw müsste wiederum das ganze Composite (od. Canvas) neu gezeichnet werden.

Die Lösung mit den Labels im Composite die ich jetzt verwende ist auch kritisch, da so viele Componente erzeugt werden, dass zum Teil das Maximum erreicht wird !

Hier kann man sich ein Bild davon machen was ich probiere:
http://www.aacm.ch/mede/simplon/
 

Wildcard

Top Contributor
mede hat gesagt.:
Die Lösung mit den Labels im Composite die ich jetzt verwende ist auch kritisch, da so viele Componente erzeugt werden, dass zum Teil das Maximum erreicht wird !
Oh je....
Ich sehe schon wo das hinführt.
Selbst ohne die Labels wird das Problem aber nicht verschwinden, den da sind immer noch tausende von Bildern.
Mit Swing wärst du definitiv besser beraten gewesen. Spätestens wenn du anfangen musst Images beim Scrollen zu disposen... :autsch:
 

WieselAc

Top Contributor
Ich hoffe du hast dir eine "ImageRegistry" geschrieben und du benutzt ImageDescriptor sonst gehst du ganz shcnell baden.
 

mede

Mitglied
SWING ;) denke nicht das man mit SWING ein solches GUI performant hinkriegt, auf jedenfall nicht auf einem alten G3 iBook ... aber diese Diskusion währe für einen anderen Thread.

Hm ich habe etwas wie eine Cover (Image) Cache, aber der verhindert nur, dass ein Bild nicht mehrmals geladen wird. Ich hatte schon ca. 300 Covers geladen was Problemlos funktionierte... Muss ich etwas beachten, wenn ich so viele Instanzen von Bildern verwende ?
 

Wildcard

Top Contributor
WieselAc hat gesagt.:
Ich hoffe du hast dir eine "ImageRegistry" geschrieben und du benutzt ImageDescriptor sonst gehst du ganz shcnell baden.
Das wird hier wenig nutzen, da diese Images mit Sicherheit alle unterschiedlich sind.


SWING icon_wink.gif denke nicht das man mit SWING ein solches GUI performant hinkriegt, auf jedenfall nicht auf einem alten G3 iBook ... aber diese Diskusion währe für einen anderen Thread.
Mit Sicherheit. Swing ist nicht langsamer als SWT.

Muss ich etwas beachten, wenn ich so viele Instanzen von Bildern verwende ?
Auch für die Bilder musst du native Resourcen allokieren, die dir irgendwann auch einfach ausgehen können.
 

mede

Mitglied
Ok zugegeben Swing ist nur langsam, wenn man es schlech programmiert.
Ich habe mich für SWT entschieden, weil ich auch damit einmal etwas erstellen wollte. In der Schule und im Job
habe ich bis anhin für Java nur mit Swing gearbeitet.

Ich versuche kaum vorgegebene Komponente zu benütze, Buttons und Menus habe ich mit Images Implementiert und die Listen und Tabellen versuche ich auch selbt zu zeichnen. Deshalb währe wahrscheinlich kaum ein Performance unterschied zu Swing, sofern man sich bei Swing auch mit einfachen Komponenten begnügt.

Ok dies mit den Resourcen muss ich wohl noch etwas genauer betrachten und mein Konzept ein wenig umbauen. Ich finde es jedoch interessant, wenn man sich um solche Probleme selber kümmer muss, und diese nicht vom Framework übernommen werden.

Deshalb habe ich während dem Studium auch eine eigene OpenGL Engine geschrieben ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Viele ActionListener (MouseListener) - Performance AWT, Swing, JavaFX & SWT 24
missy72 JavaFX Performance / ImageView in TableView über TimeLine AWT, Swing, JavaFX & SWT 1
L JavaFX ListCell Performance AWT, Swing, JavaFX & SWT 10
E Swing Miserable Performance beim Ändern der Hintergrundfarbe von JLabels AWT, Swing, JavaFX & SWT 3
W Swing Performance bei Griderstellung verbessern AWT, Swing, JavaFX & SWT 15
C Pixel-Rendering/Animation Performance in BufferedImage AWT, Swing, JavaFX & SWT 1
I JavaFX Graphics Performance AWT, Swing, JavaFX & SWT 2
S Swing Performance bei Verschachtelung problematisch AWT, Swing, JavaFX & SWT 0
R Performance Drag and Drop & Timer AWT, Swing, JavaFX & SWT 3
O AWT Performance und Bug behebung[brauche Hilfe] AWT, Swing, JavaFX & SWT 2
T Swing Allgemeines Problem mit der Performance bei DragAndDrop AWT, Swing, JavaFX & SWT 2
T Prüfen ob 2 JLabel übereinander liegen. Performance Problem. AWT, Swing, JavaFX & SWT 5
S Swing Lauftext Performance Probleme, in größerer Anwendung AWT, Swing, JavaFX & SWT 6
B Performance-Probleme AWT, Swing, JavaFX & SWT 17
D DefaultTableCellRenderer - Performance AWT, Swing, JavaFX & SWT 3
hdi Swing [Umfrage] Swing Performance AWT, Swing, JavaFX & SWT 27
B 2D-Grafik BufferedImage Performance AWT, Swing, JavaFX & SWT 3
C Performance-Problem beim Überschreiben von paintComponent() AWT, Swing, JavaFX & SWT 2
Hausmeister JTable mit Bildern - Performance AWT, Swing, JavaFX & SWT 5
J JTree Performance AWT, Swing, JavaFX & SWT 2
Developer_X Swing Graphics2D translate zerstört performance AWT, Swing, JavaFX & SWT 2
hdi Swing JTable: Mein CellRenderer ist ein Performance-Killer? AWT, Swing, JavaFX & SWT 7
J Performance bei mouseMoved(...) AWT, Swing, JavaFX & SWT 4
L JFreeChart - Performance bei PNG-Erstellung AWT, Swing, JavaFX & SWT 5
P seltsame Performance Probleme bei 2 Guis abhängig vom Aufruf AWT, Swing, JavaFX & SWT 8
G Performance beim Zeichnen erhöhen? AWT, Swing, JavaFX & SWT 21
hdi bitte um performance ratschläge AWT, Swing, JavaFX & SWT 31
G performance fragen zu AWT, Swing AWT, Swing, JavaFX & SWT 14
T (Java 6) Thumbnails in JFileChooser - Performance steigern? AWT, Swing, JavaFX & SWT 3
hdi schlechte performance bei simplem swing AWT, Swing, JavaFX & SWT 9
G Probleme mit Performance bei einer Tabelle AWT, Swing, JavaFX & SWT 16
D performance problem: paintcomponent, alphacomp, bufferedImag AWT, Swing, JavaFX & SWT 10
P SWT: StyledText Performance steigern? AWT, Swing, JavaFX & SWT 2
T Performance Problem bei BufferedImage AWT, Swing, JavaFX & SWT 3
P SWT Performance : "Text" - Ausgabe beschleunigen ? AWT, Swing, JavaFX & SWT 21
O performance g2d.drawImage() AWT, Swing, JavaFX & SWT 17
D Performance Probleme Jtable AWT, Swing, JavaFX & SWT 4
N Performance (BufferStrategy?) AWT, Swing, JavaFX & SWT 2
F Problem mit Transparenz, MouseEvents und Performance AWT, Swing, JavaFX & SWT 3
O LookAndFeel und Performance AWT, Swing, JavaFX & SWT 7
W Performance verbessern AWT, Swing, JavaFX & SWT 2
S TableCellRenderer, Performance AWT, Swing, JavaFX & SWT 9
S Performance-Problem: JTextArea als Logging-Window AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben