AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TStringlist, THashedStringlist gibts nichts schnelleres??
Thema durchsuchen
Ansicht
Themen-Optionen

TStringlist, THashedStringlist gibts nichts schnelleres??

Ein Thema von Franzelchen · begonnen am 23. Mär 2010 · letzter Beitrag vom 13. Apr 2010
 
Franzelchen

Registriert seit: 22. Mär 2007
82 Beiträge
 
#17

Re: TStringlist, THashedStringlist gibts nichts schnelleres?

  Alt 24. Mär 2010, 13:31
Zitat von Sir Rufo:
Er schreibt, dass das Befüllen des StringGrid sehr langsam ist ... und das glaube ich sogar

1. StringGrid1.RowCount

Das ständige Erhöhen des Wertes stresst unnötig.
Setze am Anfang der Schleife den Wert und fertig

2. StringGrid1.Cells[ x, y ]

Benutze besser StringGrid1.Rows[ y ] und zwar so:
Delphi-Quellcode:
StringGrid1.Rows.BeginUpdate; // Anzeige der StringGrid.Reihen nicht mehr aktualisieren
for Zeile := 0 to StringGrid1.RowCount - 1 do
  begin
    Spalte := 1; // fängt bei 0 an, also ist es die 2. Spalte im StringGrid
    StringGrid1.Rows[ Zeile ][ Spalte ] := 'Tach auch';
  end;
StringGrid1.Rows.EndUpdate; // Anzeige der StringGrid.Reihen wieder aktualisieren
Denn sonst aktualisiert sich das Formular zu Tode

3. ProgressBar

Die ProgressBar braucht auch nicht jede Änderung mitzubekommen
Delphi-Quellcode:
MaxWert := 10000;
ProgressBar1.Max := MaxWert;
for i := 0 to MaxWert - 1 do
  begin
    if ( i mod 100 = 0 ) or ( i = MaxWert ) then
      ProgressBar1.Position := i;
  end;
Dann sollte das schon schneller laufen
So, jetzt hab ich's ausprobiert.
.beginUpdate sowie .endUpdate wird zwar von der Codevervollständigung unterstützt, der Compiler dagegen erwartet eine eckige Klammer und compiliert deshalb nicht.
Die Progressbar hab ich vorerst vollständig weggelassen so das mein Text jetzt so aussieht:

Delphi-Quellcode:
begin
Screen.Cursor := crHourGlass;
startZeit := now;
  x:=tstringlist.Create;
  x.LoadFromFile('C:\DB\DatenTest.tmp');

  x.Text:= StringReplace(x.Text,'ß','SSSSSSS', [rfReplaceAll]);
  x.Sort;
  x.Text:= StringReplace(x.Text,'SSSSSSS','ß',[rfReplaceAll]);

  x.SaveToFile('sortiert.txt');


// ab hier wird es extrem langsam

  a:=0;
  
// stringgrid1.rows.beginupdate; //fehlermeldung: [ erwartet
// try
  for b:=0 to x.count-1 do
  begin
      if b>0 then begin
       if x.strings[b]=x.Strings[b-1] then begin
          StringGrid1.cells[1,a]:= inttostr(strtoint (StringGrid1.cells[1,a])+1)
      end else begin
               inc(a);
               StringGrid1.cells[1,a] := '1';
               StringGrid1.cells[0,a] := x.strings[b];
               StringGrid1.RowCount := StringGrid1.RowCount+1;
               end;
      end else begin
               StringGrid1.cells[0,a]:=x.Strings[b];
               StringGrid1.cells[1,a]:='1';
      end;
   end;
// finally;
// stringgrid1.rows.endUpdate //fehlermeldung: [ erwartet
x.Destroy;
StopZeit := Now;
StatusBar6.Panels[1].Text :='SuchZeit : '+ FormatDateTime('nn:ss:zzz', StopZeit - StartZeit) ;
Screen.Cursor := crDefault;
end;
Try finally hab ich jetzt nur reingesetzt, sicher bin ich mir nicht wozu das gut sein soll.
  Mit Zitat antworten Zitat
 


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 01:07 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