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 ?
Thema durchsuchen
Ansicht
Themen-Optionen

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 1 von 2  1 2      
dorisdoloris

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

Stringübergabe dauert sehr lange wer kann helfen ?

  Alt 14. Dez 2005, 13:52
Hallo liebe Delphifreunde erst ein Problem gelöst und schon hab ich ein neues

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

Code:
for i := 0 to ListBox1.Items.Count -1 do
begin
    sNew := sNew + '' + Listbox1.Items.Strings[i];
    ProgressBar1.Position := i; // aktuelle Position
end;
lg: Doris
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

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

  Alt 14. Dez 2005, 13:55
Anstatt dessen würde ich es so machen:
Delphi-Quellcode:
ListBox1.Items.Delimiter:='';
sNew:=ListBox1.Items.DelimitedText;
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
dorisdoloris

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

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

  Alt 14. Dez 2005, 14:00
"Delimiter" gibt es bei mir leider nicht ich benutze Delphi 5.0
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

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

  Alt 14. Dez 2005, 14:15
Hi,
also erstmal dürfte es schon ziemlich viel Zeit kosten dein Progressbar so oft zu updaten. Ich weiß nicht wie intelligent diese Komponente ist, aber schau dir mal an, wie viel Zeit du sparst wenn du nur noch alle i mod 200 = 0 updatest, vorher verändert sich ja der eigentlich Wert nicht (hoffentlich nicht verrechnet, also alle Anzahl der Elemente / 100)

Ansonsten ist es glaube ich nicht so wirklich gut den Speicher für den String immer wieder neu zu allozieren, kostet auch wieder nur Zeit.
Vielleicht (bin mir nicht sicher), geht das ganze etwas schneller, wenn du hier vorab berechnest wie lang dein Zielstring wird, den Speicher schonmal allozierst und dann z.B. direkt Speicher kopierst (für jeden String).
Müsste man wohl mal testen

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#5

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

  Alt 14. Dez 2005, 14:17
oder: sNew:=StringReplace(ListBox1.Items.CommaText,',','',[rfReplaceAll]);
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

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

  Alt 14. Dez 2005, 14:25
Also bei mir läuft ein kopieren (so wie du es hast) ganz ohne Progressbar in 0 Ticks, mit Aktualisierung alle 200 Schritte in 15 und mit Aktualisierung in jedem Schritt in ungefähr 675 Ticks.
Natürlich muss ich kurz dazu sagen, dass ich eine TStringList mit 20000 Einträgen verwende in die ich nur einen (immer gleichen) kurzen String gesteckt habe (also kommt schon viel von caching). Aber trotzdem zeigt sich zwischen den letzten beiden Fällen schon ein Faktor von knapp 50, allein durch das zu häufige Zeichnen der Progressbar. Denke dass du hier schon eine Menge mit rausholen kannst.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#7

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

  Alt 14. Dez 2005, 14:28
Das Problem ist in der Tat die Progressbar. Wird sie nur jedes 100. Mal upgedatet, so ist das Ding fast sechs mal so schnell (891 ms zu 156 ms).
Angehängte Dateien
Dateityp: zip doris_213.zip (4,4 KB, 11x aufgerufen)
Daniel Schuhmann
  Mit Zitat antworten Zitat
dorisdoloris

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

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

  Alt 14. Dez 2005, 15:35
Also ersteinmal ein Danke an alle für die Hilfe

Ich habe es nun mit der ProgressBar getestet und bin dabei zu folgenden Ergebnis gekommen

Delphi-Quellcode:
ProgressBar1.Position := i; // mit dieser Variante komm ich auf 29703 ms
If I mod 100 = 0 then ProgressBar1.StepBy(100);// mit dieser Variante komm ich auf 27297 ms

// und ohne ProgressBar komme ich auf 26504 ms

Also ich muss sagen das ist kein sehr großer Zeitgewinn. Ok jetzt werden einige sagen 2-3 sec sind gut aber ich dachte man könnte noch ein wenig mehr rausholen.


lg: Doris
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#9

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

  Alt 14. Dez 2005, 16:04
Zitat von dorisdoloris:
Delphi-Quellcode:
for i := 0 to ListBox1.Items.Count -1 do
begin
    sNew := sNew + '' + Listbox1.Items.Strings[i];
    ProgressBar1.Position := i; // aktuelle Position
end;
Eine Frage am Rande: steht da im Quelltext wirklich '' (=doppeltes Apostroph)? Das ist doch ein leerer String und der verändert doch nichts an einem String, wenn man diesem mit dem leeren String konkateniert (tolles Wort ). Also könnte man genauso folgendes Schreiben:
sNew := sNew + Listbox1.Items.Strings[i]; Ich glaube zwar kaum, dass man dadurch einen Geschwindigkeitszuwachs erzielt, aber schaden kann's ja nicht.

MfG
Binärbaum

@Daniel: Ich weiß nicht, was du meinst. Nee nee, du hast natürlich recht.
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#10

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

  Alt 14. Dez 2005, 16:08
Zitat von Binärbaum:
Also könnte man genauso folgendes Schreiben:
Wenn Du eine Änderung vorschlägst, solltest Du auch den geänderten Code präsentieren

Ich vermute mal, gemeint war:
sNew := sNew + Listbox1.Items.Strings[i];
Daniel Schuhmann
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:20 Uhr.
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