AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Performanceproblem mit ca. 30000 Listboxeinträgen
Thema durchsuchen
Ansicht
Themen-Optionen

Performanceproblem mit ca. 30000 Listboxeinträgen

Ein Thema von Hallo_Thomas · begonnen am 12. Mai 2005 · letzter Beitrag vom 18. Mai 2005
Antwort Antwort
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#1

Re: Performanceproblem mit ca. 30000 Listboxeinträgen

  Alt 13. Mai 2005, 00:09
oops ... das mit dem Datei öffnen hatte ich ja glatt übersehen

so .. hier aber jetzt die Lösung des Problems ....

Der Trick ist ... das man die Werte der Listbox extra nach int Konvertiert .. s. Unten !

Delphi-Quellcode:
{-----------------------------------------------------------------------------
  Procedure: Addmyitem
  Arguments: const AItem: string; const AColor: TColor
  Hier werden neue Einträge in die Listbox durchgeführt.
  Es werden auch die Berechnung der "Punkt" und deren Ausgabe
  erledigt.
-----------------------------------------------------------------------------}


procedure TForm1.Addmyitem(const AItem: string; const AColor: TColor);
var
  x, i, y, Counter : Integer;
  cg, cb : double;
  counte : array[0..409] of Integer;

  //Dynamisches Integer Array
  iArray : array of integer;

begin
  Anzeige.Items.InsertObject(0, AItem, TObject(AColor));
  DoubleBuffered := True;
  cg := (Form2.SpinEdit1.Value);
  cb := (Form2.SpinEdit2.Value);

  //werte von Listbox Anzeige in Array of Integer konvertieren
  for i := 0 to Anzeige.Count - 1 do
    begin
      //Array vergrößern
      SetLength(iArray, i + 1);
      //String to Int wndeln
      iArray[i] := StrToInt(Anzeige.Items[i]);
    end;

  // Alle "Counter" auf 0 setzen
  Counter := 0;
  ZeroMemory(@Counte, SizeOf(counte));


  // Hier beginnen die Berechnungen
  // Jedes Item der Listbox durchlaufen - Jetzt iArray
  for x := 0 to High(iArray) do
    begin

      if iArray[x] in [1, 3, 10] then
        Inc(Counter);

      if iArray[x] in [6] then
        Counter := 0;

      // Mit jedem SetOfByte vergleichen
      for y := 0 to 409 do
        begin
          //hier mit dem Int Array arbeiten
          if iArray[x] in werte[y] then
            Counte[y] := 0
          else
            Inc(Counte[y]);

        end;
    end;

  // Ab hier kommt die Ausgabe der Berechnungen
  Label1.Caption := IntToStr(Counter);
  if counter = cg then
    begin
      Image2.Picture.Assign(bild2); // Bilid zuweisen
      label1.font.color := CLblack
    end
  else
    begin
      // Wass passiert wenn keiner von beiden werten zutrifft?
      // Dann könnte diese If-Abfrage nämlich weg. Entweder ist counter = cg
      // oder er ist es nicht.
      if counter = cb then
        begin
          Image2.Picture.Assign(bild1);
          label1.font.color := CLwhite;
        end;
    end;

  for x := 0 to 409 do
    begin
      (FindComponent('Label' + IntToStr(x + 1)) as TLabel).Caption := IntToStr(Counte[x]);
    end;

  //Array freigeben
  iArray := nil;
end;
  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 11:48 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