Perform. in JTable bei verw. von CellRenderern ?

Von: , Frage gestellt am Fr, 9. Jul 2004

Hallo,

ich hätte einmal eine Frage zur Geschwindigkeit beim Arbeiten mit großen Datenmengen (10000 Einträge) in einer Tabelle oder einem Tree.

Der CellRenderer wird doch bei jedem Klicken, Scrollen und jeder Mausbewegung durchlaufen. Wie macht sich das auf die Performance im Tree oder der Tabelle bemerkbar wenn der Renderer z.B. ein Panel ist, welches zwei Labels mit Icon und eine Textarea enthält.

Gibt es Tricks beim Umgang mit den Renderern ? Worauf sollte man achten ?
Oder hat der Renderer keinen Einfluß auf die Performance egal wie komplex er aufgebaut ist ?


Danke
Arni

5 Antworten zu dieser Frage

  1. Antwort von nach 32 Minuten 0 hilfreich
    Re: Perform. in JTable bei verw. von CellRenderern

    Probiers doch einfach mal aus!

    Ein CellRenderer wird schließlich immer durchlaufen. Du kannst natürlich jedes Programm in die Knie zwingen, aber sooooo lahm ist Java auch nicht.

    Bei mir wird eine Tabelle mit 22000 Einträgen und nicht geringer Breite innerhalb von unter 4 Sekunden aufgebaut. Inklusive Datenbankabfrage.

    Gruß

    Peter

    • Antwort von nach 21 Stunden 0 hilfreich
      Re^2: Perform. in JTable bei verw. von CellRendere

      Hallo Peter,

      wie sieht bei Dir der Renderer für die Tabelle aus d.h. welche Componenten werden verwendet?

      Gruß
      Arnfried [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

  2. Antwort von nach 3 Stunden 0 hilfreich
    Re: Perform. in JTable bei verw. von CellRenderern

    Moin Der CellRenderer wird doch bei jedem Klicken, Scrollen und
    jeder Mausbewegung durchlaufen.
    Nicht immer: Wenn du z.B. eine JScrollPane mit Doublebuffering hinbekommst wird nicht immer neu aufgebaut.

    Ausserdem werden nur die Zellen neu gemalt die 1. angezeigt werden und sich 2. geändert haben können. Der Rest wird kopiert. Wie macht sich das auf die
    Performance im Tree oder der Tabelle bemerkbar wenn der
    Renderer z.B. ein Panel ist, welches zwei Labels mit Icon und
    eine Textarea enthält.
    Sie wird langsamer sein als bei z.B. einem JLabel. Aber merkbar langsamer... ich glaub nicht. Gibt es Tricks beim Umgang mit den Renderern ? Worauf sollte
    man achten ?
    kein "new" im render-code selbst.
    keinerlei Layout-befehle/abarbeitung im Code selbst. Oder hat der Renderer keinen Einfluß auf die Performance egal
    wie komplex er aufgebaut ist ?
    nee, wenn du z.B. eine java3D-Canvas als Cell-Render benutzt geht die Performance in den Keller. (probiert bei 3x3-Tabellen)

    cu

    • Antwort von nach 21 Stunden 0 hilfreich
      Re^2: Perform. in JTable bei verw. von CellRendere

      Danke für die Info.
      Ich hätte aber nochmals Fragen dazu. Moin Der CellRenderer wird doch bei jedem Klicken, Scrollen und
      jeder Mausbewegung durchlaufen.
      Nicht immer: Wenn du z.B. eine JScrollPane mit Doublebuffering
      hinbekommst wird nicht immer neu aufgebaut.
      Wie macht man den das mit Doublebuffering ? Gibt es dazu irgendwo Infos. Geht das auch beim Baum ?
      Ausserdem werden nur die Zellen neu gemalt die 1. angezeigt
      werden und sich 2. geändert haben können. Der Rest wird
      kopiert. Wie macht sich das auf die
      Performance im Tree oder der Tabelle bemerkbar wenn der
      Renderer z.B. ein Panel ist, welches zwei Labels mit Icon und
      eine Textarea enthält.
      Sie wird langsamer sein als bei z.B. einem JLabel. Aber
      merkbar langsamer... ich glaub nicht. Gibt es Tricks beim Umgang mit den Renderern ? Worauf sollte
      man achten ?
      kein "new" im render-code selbst.
      keinerlei Layout-befehle/abarbeitung im Code selbst.
      Kein "new" !? Wenn ich doch einen eigenen Renderer mit z.B. einem Label fürs Icon und einer Textarea machen will muß ich doch das Label und die Textarea mit "new" anlegen. "New" brauche ich doch immer wenn ich eigene Componenten auf einem Renderer (extends JPanel) unterbringen möchte. Oder ? Oder hat der Renderer keinen Einfluß auf die Performance egal
      wie komplex er aufgebaut ist ?
      nee, wenn du z.B. eine java3D-Canvas als Cell-Render benutzt
      geht die Performance in den Keller. (probiert bei
      3x3-Tabellen)
      Sorry jetzt kommt noch eine Anfängerfrage. Was sind java3D-Canvas ?
      Ich kenne bisher nur AWT und Swing.


      Danke
      Arni
      cu

      • Antwort von nach einem Tag 0 hilfreich
        Re^3: Perform. in JTable bei verw. von CellRendere

        Moin Wie macht man den das mit Doublebuffering ?
        Du erzeugtst im Cellrenderer ein BufferdImage für jede Zelle. Beim ersten "malen" der Zelle malst du in das BufferedImage und danach das BufferImage ins Graphics-Object. Solange sich die Zelle nicht ändert benutzt du nur noch das BufferedImage. Bei grossen Tabellen/Bäumen sollte man allerdings die maximale Anzahl der Buffer begrenzen (wegen dem Speicherverbrauch) Gibt es dazu
        irgendwo Infos.
        In der Doc zu java-1.4 steht ein bisschen was dazu. Geht das auch beim Baum ?
        Das geht bei allen GUI-Elementen (Bei allem was auf dem Schirm angezeigt werden kann) kein "new" im render-code selbst.
        Kein "new" !?
        Nicht in der Render-Methode selbst:

        Alle Label's, Panel's, Icon's ... sollten einmal beim erzeugen des Renderers mit angelegt werden und dann immer wieder verwendet werden. Sorry jetzt kommt noch eine Anfängerfrage. Was sind
        java3D-Canvas ?
        Es gibt 2 Möglichkeiten unter java schnelle 3D-Darstellungen zu erzeugen: JOGL und java3D. Das funktioniert dann ähnlich wie OpenGL (oder DirectX) und ist für Spiele (JOGL) oder Visualisierungen (java3D) geacht. Kann man sich von sun runterladen, ist beim normalen java nicht dabei.

        cu

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!