AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Stringübergabe dauert sehr lange wer kann helfen ?

Stringübergabe dauert sehr lange wer kann helfen ?

Ein Thema von dorisdoloris · begonnen am 14. Dez 2005 · letzter Beitrag vom 14. Dez 2005
Antwort Antwort
Seite 2 von 2     12
dorisdoloris

Registriert seit: 9. Nov 2005
44 Beiträge
 
#11

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

  Alt 14. Dez 2005, 17:40
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#12

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

  Alt 14. Dez 2005, 18:24
Hallo Doris,

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
  Mit Zitat antworten Zitat
dorisdoloris

Registriert seit: 9. Nov 2005
44 Beiträge
 
#13

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

  Alt 14. Dez 2005, 19:01
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#14

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

  Alt 14. Dez 2005, 19:34
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;
Andreas
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#15

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

  Alt 14. Dez 2005, 20:12
Hallo,
Zitat von dorisdoloris:
Ich habe es jetzt mal mit TStringList getestet wird aber noch langsamer
Das ist klar, Dein
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#16

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

  Alt 14. Dez 2005, 20:14
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 22:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf