Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stringübergabe dauert sehr lange wer kann helfen ? (https://www.delphipraxis.net/58904-stringuebergabe-dauert-sehr-lange-wer-kann-helfen.html)

dorisdoloris 14. Dez 2005 16:40

Re: Stringübergabe dauert sehr lange wer kann helfen ?
 
Ich habe es jetzt mal mit TStringList getestet wird aber noch langsamer :(

Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
slNew: TSringList;
begin

slNew := TStringList.Create;

for i:= 0 to ListBox1.Items.Count -1 do
begin

slNew.Text := slNew.Text + ListBox1.Items.Strings[i];
If i mod 100 = 0 Then ProgressBar1.StepBy(100); // aktuelle Position

end; // schleife ende

marabu 14. Dez 2005 17:24

Re: Stringübergabe dauert sehr lange wer kann helfen ?
 
Hallo Doris,

Zitat:

Zitat von dorisdoloris
Schaut euch mal den Code an in der ListBox sind 20000 Zeilen enthalten und die Übergabe dauert recht lange.

Wie lang sind die einzelnen Zeilen?
Wohin sollen sie übergeben werden?

Grüße vom marabu

dorisdoloris 14. Dez 2005 18:01

Re: Stringübergabe dauert sehr lange wer kann helfen ?
 
Hallo Marabu

Aus wieviel Zeichen jede Zeile besteht oder wie lang sie ist kann ich nicht sagen ändert sich ja auch Zeile für Zeile. Übergeben wird es an einer Variablen von Typ String (sNew). Am besten du schaust dir das Beispiel von Daniel Schuhmann an so in etwa sieht das dann aus.

shmia 14. Dez 2005 18:34

Re: Stringübergabe dauert sehr lange wer kann helfen ?
 
Problem
Delphi-Quellcode:
// es wird 20000 Mal an sNew angehängt
// bei jedem Anhängen muss ein neuer speicherblock allokiert werden
// und der gesamte bisherige String kopiert werden !!!
sNew := sNew + '' + Listbox1.Items.Strings[i];
Viel Schneller ist:
Delphi-Quellcode:
function CopyThatList(liste:TStrings; const delimstring:string):string;
var
   i, L, dl : Integer;
   size : integer;
   P : PChar;
   s : string;
begin
   dl := Length(delimstring);
   size := 0;
   for i := 0 to liste.Count - 1 do
      Inc(size, Length(liste[I]) + dl);
   SetLength(result, size); // Speicher nur einmal reservieren !!
   p := PChar(Result);
  for i := 0 to liste.Count - 1 do
  begin
    s := liste[i];
    L := Length(s);
    if L <> 0 then
    begin
      System.Move(Pointer(S)^, P^, L);
      Inc(P, L);
    end;
    if dl <> 0 then
    begin
       System.Move(delimstring[1], P^, dl);
       Inc(P, dl);
    end;
  end;
end;

xaromz 14. Dez 2005 19:12

Re: Stringübergabe dauert sehr lange wer kann helfen ?
 
Hallo,
Zitat:

Zitat von dorisdoloris
Ich habe es jetzt mal mit TStringList getestet wird aber noch langsamer :(

Das ist klar, Dein
Delphi-Quellcode:
slNew.Text := slNew.Text + ListBox1.Items.Strings[i];
muss jedesmal den String aus der Stringliste zusammensetzen, den neuen String addieren und dann das Ergebnis wieder aufteilen. Das ist so ziemlich das Langsamste, was man machen kann.

Gruß
xaromz

marabu 14. Dez 2005 19:14

Re: Stringübergabe dauert sehr lange wer kann helfen ?
 
Geht auch so:

Delphi-Quellcode:
function ItemsToStr(s: TStrings): string;
var
  i: integer;
begin
  Result := s.CommaText;
  for i := 1 to Length(Result) do
    if Result[i] = ',' then
      Result[i] := ' ';
end;
Aber performant geht anders...

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:14 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz