![]() |
Performanceproblem mit ca. 30000 Listboxeinträgen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe jetzt noch mal die letzten Tage probiert und gemacht aber ich komme irgenwie kein Stückchen vorran! Ich versuche die Geschwindigkeit des Programms im Anhang zu erhöhen, im Moment benötigt es für 30000 zahlen ca. 34s Zeit egal ob ich nun Stringliste benute oder ob ich für
Delphi-Quellcode:
diese Zeile einsetze
for pl0 := Form1.Anzeige.count - 1 downto 0 do
begin for x := 0 to 81 do begin if StrToInt(Form1.Anzeige.Items[pl0]) in werte[x] then Counte[x] := 0
Delphi-Quellcode:
es ist auch egal ob ich Anzeige.Items.BeginUpdate; einsetze. Der Berechnungszeitraum bleibt bei 34s.
for pl0 := 2 downto 0 do
begin for x := 0 to 81 do begin if StrToInt(Form1.Anzeige.Items[pl0]) in werte[x] then Counte[x] := 0
Delphi-Quellcode:
Anzeige.Items.endUpdate;
var
x, i, pl0, Counter: Integer; cg, cb : double; counte : array[0..81] of Integer; werte : array[0..81] of mySet; begin Anzeige.Items.BeginUpdate; Label999.Caption:=IntToStr(Anzeige.Items.Count); Anzeige.Items.InsertObject(0, AItem, Pointer(AColor)); DoubleBuffered := True; cg := (Form2.SpinEdit1.Value); cb := (Form2.SpinEdit2.Value); begin for i := 0 to 81 do begin Counte[i] := 0; end; werte[0] := [1]; werte[1] := [2]; werte[2] := [3]; werte[3] := [4]; werte[4] := [5]; werte[5] := [6]; werte[6] := [7]; werte[7] := [8]; werte[8] := [9]; werte[9] := [10]; werte[10]:= [11]; werte[11]:= [12]; werte[12]:= [1,2]; werte[13]:= [1,3]; werte[14]:= [1,4]; werte[15]:= [1,5]; werte[16]:= [1,6]; werte[17]:= [1,7]; werte[18]:= [1,8]; werte[19]:= [1,9]; werte[20]:= [1,10]; werte[21]:= [1,11]; werte[22]:= [1,12]; Werte[23]:= [1,2,3]; werte[24]:= [1,2,4]; werte[25]:= [1,2,5]; werte[26]:= [1,2,6]; werte[27]:= [1,2,7]; werte[28]:= [1,2,8]; werte[29]:= [1,2,9]; werte[30]:= [1,2,10]; werte[31]:= [1,2,11]; werte[32]:= [1,2,12]; werte[33]:= [1,2,3,4]; werte[34]:= [1,2,3,5]; werte[35]:= [1,2,3,6]; werte[36]:= [1,2,3,7]; werte[37]:= [1,2,3,8]; werte[38]:= [1,2,3,9]; werte[39]:= [1,2,3,10]; werte[40]:= [1,2,3,11]; werte[41]:= [1,2,3,12]; werte[42]:= [1,2,4,5]; werte[43]:= [1,2,4,6]; werte[44]:= [1,2,4,7]; werte[45]:= [1,2,4,8]; werte[46]:= [1,2,4,9]; werte[47]:= [1,2,4,10]; werte[48]:= [1,2,4,11]; werte[49]:= [1,2,4,12]; werte[50]:= [1,2,5,6]; werte[51]:= [1,2,5,7]; werte[52]:= [1,2,5,8]; werte[53]:= [1,2,5,9]; werte[54]:= [1,2,5,10]; werte[55]:= [1,2,5,11]; werte[56]:= [1,2,5,12]; werte[57]:= [1,2,6,7]; werte[58]:= [1,2,6,8]; werte[59]:= [1,2,6,9]; werte[60]:= [1,2,6,10]; werte[61]:= [1,2,6,11]; werte[62]:= [1,2,6,12]; werte[63]:= [1,2,7,8]; werte[64]:= [1,2,7,9]; werte[65]:= [1,2,7,10]; werte[66]:= [1,2,7,11]; werte[67]:= [1,2,7,12]; werte[68]:= [1,2,8,9]; werte[69]:= [1,2,8,10]; werte[70]:= [1,2,8,11]; werte[71]:= [1,2,8,12]; werte[72]:= [1,2,9,10]; werte[73]:= [1,2,9,11]; werte[74]:= [1,2,9,12]; werte[75]:= [1,2,10,11]; werte[76]:= [1,2,10,12]; werte[77]:= [1,2,11,12]; werte[78]:= [1,2,3,4,5]; werte[79]:= [1,2,3,4,5,6]; werte[80]:= [1,2,3,4,5,7]; werte[81]:= [1,2,3,4,5,8]; for pl0 := Form1.Anzeige.count - 1 downto 0 do begin for x := 0 to 81 do begin if StrToInt(Form1.Anzeige.Items[pl0]) in werte[x] then Counte[x] := 0 else Inc(Counte[x]); end; for x := 0 to 81 do begin (FindComponent('Label' + IntToStr(x + 2)) as TLabel).Caption := IntToStr(Counte[x]); end; end; end; end; |
Re: Performanceproblem mit ca. 30000 Listboxeinträgen
Also ich hab' jetzt keine Zeit mir Deinen Quelltext anzuschauen, aber trotzdem mal ein ganz allgemeiner Hinweis :
Setz' Deine Listbox oder was auch immer das sein mag auf InVisible, dann füllst Du die Einträge mit Inhalten, und danach setzt Du die wieder auf Visible. Wenn das InVisible ist während Du das füllst - dann spart das ungemein Zeit. |
Re: Performanceproblem mit ca. 30000 Listboxeinträgen
Zitat:
ich habe dir jetzt schon in zwei anderen Threads gesagt (und dir Beispiele geschriebne) das Du die Ausgabe der Ergebnisse aus der Schleife für die Berechnungen hereausnehmen "sollst". |
Re: Performanceproblem mit ca. 30000 Listboxeinträgen
@Sharky, bevor ich Deins jetzt anschaue, erst mal Dankeschön, für die vielen korrekten Antworten. Die waren echt Spitze!!!!!!!!!!!!!!
@Delphi_Fanatic Mit Visible True oder False, die Zeit bleibt bei 34s |
Re: Performanceproblem mit ca. 30000 Listboxeinträgen
@ Sharky
Delphi-Quellcode:
for y := Form1.Anzeige.count - 1 downto 0 do
begin for x := 0 to 409 do begin if StrToInt(Form1.Anzeige.Items[y]) in werte[x] then Counte[x] := 0 else Inc(Counte[x]); end; for x := 0 to 409 do begin (FindComponent('Label' + IntToStr(x + 2)) as TLabel).Caption := IntToStr(Counte[x]); end; end; Bis jetzt lagst Du immer richtig, aber dieses einemal nicht, würdch behaupten. Ich jetzt ein Diese Zeile so ersetzt und unten natürlich folgendes rausgelöscht.
Delphi-Quellcode:
Jetzt sind 5 min rum das Programm rechnet immer noch, glaub ich verzweifle
for x := 0 to 409 do
begin (FindComponent('Label' + IntToStr(x + 2)) as TLabel).Caption := IntToStr(Counte[x]); P.S. Im jetzigen Programm oben und eigenlich auch schon im vorhergehenden Programm waren doch diese anWeisungen getrennt von einnander, dies hat schon einen unheimlichen Leistungsschub gebracht, aber eh bissl fehlt noch |
Re: Performanceproblem mit ca. 30000 Listboxeinträgen
Dumme Frage, aber welcher normaldenkende Mensch soll diese Anzahl an Items denn bitte schön lesen?
|
Re: Performanceproblem mit ca. 30000 Listboxeinträgen
Zitat:
Delphi-Quellcode:
for i := 0 to ComponentCount - 1 do
begin if (Components[i] is TLabel) and AnsiStartsText('Label', Components[i].Name) then begin x := StrToInt(Copy(Components[i].Name, 6, MaxInt)); if (x >= 0) and (x <= 409) then TLabel(Components[i]).Caption := IntToStr(Counte[x]); end; end; |
Re: Performanceproblem mit ca. 30000 Listboxeinträgen
Zitat:
Schauen wir uns mal den Code an:
Delphi-Quellcode:
Du weisst also jedem TLabel 30.000 mal einenen wert zu :!:
for pl0 := Form1.Anzeige.count - 1 downto 0 do // (1) Das ist die Schleife für die Items (30.000)
begin for x := 0 to 81 do // (2) Das ist die Schleife für die Berechnung begin if StrToInt(Form1.Anzeige.Items[pl0]) in werte[x] then Counte[x] := 0 else Inc(Counte[x]); end; // (2) Hier endet die Schleife für die Berechnung for x := 0 to 81 do // (3) Das ist die Schleife für die Ausgabe begin (FindComponent('Label' + IntToStr(x + 2)) as TLabel).Caption := IntToStr(Counte[x]); end; // (3) Hier endet die Schleife für die Ausgabe end; // (1) hier endet die Schleife für die Items. end; Wenn Du es aus der Schleife der Items raus nimmst:
Delphi-Quellcode:
dann weisst Du jedem Label genau einmal einen Wert zu.
for pl0 := Form1.Anzeige.count - 1 downto 0 do // (1) Das ist die Schleife für die Items (30.000)
begin for x := 0 to 81 do // (2) Das ist die Schleife für die Berechnung begin if StrToInt(Form1.Anzeige.Items[pl0]) in werte[x] then Counte[x] := 0 else Inc(Counte[x]); end; // (2) Hier endet die Schleife für die Berechnung end; // (1) hier endet die Schleife für die Items. for x := 0 to 81 do // (3) Das ist die Schleife für die Ausgabe begin (FindComponent('Label' + IntToStr(x + 2)) as TLabel).Caption := IntToStr(Counte[x]); end; // (3) Hier endet die Schleife für die Ausgabe end; |
Re: Performanceproblem mit ca. 30000 Listboxeinträgen
@jbg Natürlich niemand, aber das Auswertungsprogramm , ungefähr 15 Labels benötigen jede Runde alle, die restlich ca zw. 20-300 Items
Deswegen wollte ich zur Probe erst mal
Delphi-Quellcode:
aber auch dies hat keinen Performance Erfolg gebracht.
for x := 2 downto 0 do
Und sei dir sicher, ich brauche insgesamt ca.600 Label, aber Aufgrund der momentanen Performance, kann ich mit nur 400 arbeiten. Die 30000 nehme ich als Richtwert, da vergleichbare Programme dies angeblich verabeiten. |
Re: Performanceproblem mit ca. 30000 Listboxeinträgen
1. mal sollte Sharky's Post viel zeit sparen ...
Und 2. falls du deine 81 (?) Label's zur Laufzeit erstellst oder gar des öfteren befüllst könntest du sie ja in ein array of TLabel stecken. sollte auch n bissl helfen .... [EDIT] Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 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