AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Massive Performanceprobleme mit TJvImageComboBox
Thema durchsuchen
Ansicht
Themen-Optionen

Massive Performanceprobleme mit TJvImageComboBox

Ein Thema von BastiFantasti · begonnen am 5. Sep 2019 · letzter Beitrag vom 21. Sep 2019
Antwort Antwort
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
136 Beiträge
 
Delphi 12 Athens
 
#1

AW: Massive Performanceprobleme mit TJvImageComboBox

  Alt 6. Sep 2019, 11:15
Hallo und danke für die Tipps.

Dann werde ich mir mal den VirtualTreeView anschauen.

Ich werde berichten ...

Danke nochmals

Gruß
Bastian
Bastian
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Massive Performanceprobleme mit TJvImageComboBox

  Alt 6. Sep 2019, 12:17
Sorry, aber wenn es bei dir 350ms Dauert, 100 Items hinzuzufügen ist entweder irgendwas mit deinen Compileroptionen nicht in Ordnung oder du arbeitest auf ner Uralt CPU - mit meinem schon betagten i5 geht das in 40ms

Delphi-Quellcode:
    icb1.Items.Clear;
    if cbSorted.Checked then
      myds.Sort;
    icb1.Items.BeginUpdate;
    try
      for iter := 0 to myds.Count - 1 do
      begin
        item := icb1.Items.Add;
        item.Text := myds[iter];
        if cbWithPic.Checked then
          item.ImageIndex := iter mod 2;
      end;
    finally
      icb1.Items.EndUpdate;
    end;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 6. Sep 2019 um 12:34 Uhr)
  Mit Zitat antworten Zitat
Pawel Piotrowski

Registriert seit: 13. Aug 2003
9 Beiträge
 
#3

AW: Massive Performanceprobleme mit TJvImageComboBox

  Alt 6. Sep 2019, 17:25
Das ist sehr interessant. Ich wundere mich, wo der Unterschied liegt?
Bei mir ist es sogar noch langsamer als bei BastiFantasti .

ich habe einen i7 6700K @4GHz

Habe mal ein neues blanko Projekt erstellt, etwas vereinfacht.
Nur ein TButton, TMemo und natuerlich JvImageComboBox plaziert.
delphi Rio
Release build
JEDI VCL Library Version 3.50

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  st, stClear, stAdd, stSetText: TStopWatch;
  x: Integer;
  j: Integer;
  item: TJvImageItem;
begin
  for x := 0 to 9 do
  begin
      st := TStopWatch.startNew;
    stAdd.Reset;
    stSetText.Reset;
    stClear.Reset;

    JvImageComboBox1.items.BeginUpdate;
    try
      stClear.start;
      JvImageComboBox1.items.clear;
      stClear.Stop;

      for j := 0 to 99 do
      begin
          stAdd.start;
        item := JvImageComboBox1.items.Add;
        stAdd.Stop;

        stSetText.start;
        item.Text := 'abcdefgh' + IntToStr(j);
        stSetText.Stop;
      end;

    finally
      JvImageComboBox1.items.EndUpdate;
    end;

    st.Stop;
    Memo1.Lines.Add(
      format(
      '#%d. done in %d ms; clear: %d ms; add: %d ms; setText: %d ms',
      [(x + 1),
      st.ElapsedMilliseconds,
      stClear.ElapsedMilliseconds,
      stAdd.ElapsedMilliseconds,
      stSetText.ElapsedMilliseconds]));
  end;
  
end;
Und so sehen meine Resultate aus:

Delphi-Quellcode:
#1. done in 367 ms; clear: 0 ms; add: 34 ms; setText: 274 ms
#2. done in 728 ms; clear: 420 ms; add: 28 ms; setText: 231 ms
#3. done in 697 ms; clear: 381 ms; add: 32 ms; setText: 234 ms
#4. done in 679 ms; clear: 367 ms; add: 29 ms; setText: 234 ms
#5. done in 719 ms; clear: 376 ms; add: 35 ms; setText: 259 ms
#6. done in 753 ms; clear: 390 ms; add: 39 ms; setText: 271 ms
#7. done in 779 ms; clear: 427 ms; add: 30 ms; setText: 255 ms
#8. done in 791 ms; clear: 375 ms; add: 36 ms; setText: 322 ms
#9. done in 728 ms; clear: 397 ms; add: 29 ms; setText: 227 ms
#10. done in 744 ms; clear: 391 ms; add: 33 ms; setText: 271 ms
Pawel Piotrowski
  Mit Zitat antworten Zitat
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
136 Beiträge
 
Delphi 12 Athens
 
#4

AW: Massive Performanceprobleme mit TJvImageComboBox

  Alt 9. Sep 2019, 07:14
Ich kann die Ergebnisse von Pawel so auch bestätigen.
An meinem Rechner sollte es nicht liegen. Ist ein i7-6700

Der erste Durchlauf mit leerem Control liegt bei < 200ms und alle darauffolgenden fast 200ms drüber
Das Leeren bzw. Freigeben der Elemente dauert exorbitant lang.
Bei der Tabelle von Pawel sieht man sehr gut, dass das leeren stellenweise länger dauert als das neu befüllen...


@Stevie mit welcher Delphi Version hast du das getestet?
Bastian
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#5

AW: Massive Performanceprobleme mit TJvImageComboBox

  Alt 9. Sep 2019, 10:08
Das Entfernen und erneute Erzeugen von Instanzen ist immer schlecht für die Performance.

Warum verwendest du die bereits vorhandenen Einträge nicht wieder? Dann geht das auch wesentlich schneller.

Delphi-Quellcode:
procedure UpdateItems(const AItems: TJvImageItems; const AValues: TStrings);
var
  itemIndex: Integer;
  itemTemplate: TJvImageItem;
begin
  AItems.BeginUpdate();
  try
    // zuviele Einträge -> löschen vom Ende
    while AItems.Count > AValues.Count do
      AItems.Delete(AItems.Count-1);
    // zuwenig Einträge -> neue anfügen
    while AItems.Count < AValues.Count do
      AItems.Add;

    // Template erstellen
    itemTemplate := TJvImageItem.Create(AItems);
    try
      for itemIndex := 0 to AValues.Count -1 do
      begin
        // Template Werte setzen
        itemTemplate.Text := AValues[itemIndex];
        
        // Template zuweisen
        AItems[itemIndex].Assign(itemTemplate);
      end;
    finally
      FreeAndNil(itemTemplate);
    end;
  finally
    AItems.EndUpdate();
  end;
end;

Geändert von Schokohase ( 9. Sep 2019 um 10:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Massive Performanceprobleme mit TJvImageComboBox

  Alt 9. Sep 2019, 10:17
@Stevie mit welcher Delphi Version hast du das getestet?
Mit 10.1.2 - das ist unsere produktive Version.

Code aus Beitrag #10 mit 10.3.2 (sowohl jcl als auch jvcl neuster stand von github):

Code:
#1. done in 18 ms; clear: 0 ms; add: 3 ms; setText: 10 ms
#2. done in 31 ms; clear: 14 ms; add: 2 ms; setText: 9 ms
#3. done in 31 ms; clear: 13 ms; add: 2 ms; setText: 10 ms
#4. done in 30 ms; clear: 13 ms; add: 2 ms; setText: 9 ms
#5. done in 30 ms; clear: 13 ms; add: 2 ms; setText: 9 ms
#6. done in 30 ms; clear: 13 ms; add: 2 ms; setText: 9 ms
#7. done in 29 ms; clear: 13 ms; add: 2 ms; setText: 9 ms
#8. done in 30 ms; clear: 13 ms; add: 2 ms; setText: 9 ms
#9. done in 30 ms; clear: 13 ms; add: 2 ms; setText: 9 ms
#10. done in 29 ms; clear: 13 ms; add: 2 ms; setText: 9 ms
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 9. Sep 2019 um 10:51 Uhr)
  Mit Zitat antworten Zitat
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
136 Beiträge
 
Delphi 12 Athens
 
#7

AW: Massive Performanceprobleme mit TJvImageComboBox

  Alt 9. Sep 2019, 16:06
Hier die Ergebnisse von mir, Delphi 10.3.2 / x86 / jcl und jvcl werde ich mal von github aktualisieren...

Code:
#1. done in 411 ms; clear: 178 ms; add: 24 ms; setText: 174 ms
#2. done in 314 ms; clear: 161 ms; add: 16 ms; setText: 107 ms
#3. done in 406 ms; clear: 194 ms; add: 24 ms; setText: 162 ms
#4. done in 302 ms; clear: 157 ms; add: 15 ms; setText: 101 ms
#5. done in 411 ms; clear: 260 ms; add: 17 ms; setText: 109 ms
#6. done in 317 ms; clear: 163 ms; add: 19 ms; setText: 98 ms
#7. done in 386 ms; clear: 241 ms; add: 15 ms; setText: 98 ms
#8. done in 386 ms; clear: 163 ms; add: 19 ms; setText: 160 ms
#9. done in 315 ms; clear: 177 ms; add: 16 ms; setText: 98 ms
#10. done in 390 ms; clear: 163 ms; add: 21 ms; setText: 180 ms
Bastian
  Mit Zitat antworten Zitat
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
136 Beiträge
 
Delphi 12 Athens
 
#8

AW: Massive Performanceprobleme mit TJvImageComboBox

  Alt 9. Sep 2019, 16:08
@Stevie kannst du deine Compilereinstellungen mal posten?
Bastian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz