AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringlist mit 60000 Einträgen zu langsam

Ein Thema von friedemann2009 · begonnen am 10. Feb 2010 · letzter Beitrag vom 12. Feb 2010
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
friedemann2009

Registriert seit: 10. Feb 2010
49 Beiträge
 
#1

TStringlist mit 60000 Einträgen zu langsam

  Alt 10. Feb 2010, 12:36
Liebe Leute,

ich habe eine Liste in einer Stringlist mit teilweise über 60-100.000 Einträgen, die ich derzeit der Reihe nach abarbeiten muss. In jeder Zeile sind mit TAB getrennt 3 Wörter, von denen immer ein bestimmtes herausgezogen und in eine neue Stringlist übertragen wird.

Mein Problem: Wenn ich die Liste durchgehe, dauert es ewig: >5 Minuten für 30000 Einträge (Netbook mit 1,4 Ghz und 1GB RAM).

Hat jemand eine Idee, wie ich das (SEHR) viel schneller hinbekomme?

Danke für Eure Mühe und Hilfe, viele Grüße,
friedemann

PS: Delphi 5
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: TStringlist mit 60000 Einträgen zu langsam

  Alt 10. Feb 2010, 12:37
Umstellen auf TListView mit virtuellen Modus
Umstellen auf VirtualStringTree mit virtuellen Modus
Umstellen auf TElTreeStringgrid (mit virtuellen Modus)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: TStringlist mit 60000 Einträgen zu langsam

  Alt 10. Feb 2010, 12:42
Was du auch noch probieren könntest, wäre vor dem Abarbeiten bei beiden Stringlists ein

StringList.BeginUpdate; aufzurufen. Nach dem Abarbeiten nicht das

StringList.EndUpdate; vergessen! (Kann dir leider im Moment nicht sagen, ob Begin- bzw. EndUpdate einen Geschwindigkeitsvorteil für dich bringt).

mfg
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#4

Re: TStringlist mit 60000 Einträgen zu langsam

  Alt 10. Feb 2010, 12:44
@Bernhard: StringList und nicht StringGrid (ich geh mal davon auß, daß er sich da nicht verschrieben hat)

Wie verarbeitesten du denn diese Liste
und wie groß ist diese (der Text in Byte)?

100.000 Einträge ist jetzt nicht sehr viel.

Erstmal könntest du den langsamen Speichermanager von Delphi austauschen > Bei Google suchenFastMM
(in neueren Delphis wurde er schon ausgetauscht)

Und jetzt kann man erstmal nur noch deine Verarbeitung versuchen zu optimieren, aber diese kenne wir noch nicht.


PS: BeginUpdate bringt bei einer reinen/alleinstehenden StringListe nicht viel, da dieses OnChange-Ereignisse und ähnliches, wie GUI-Aktualisierungen unterbindet, welche es bei einer enzelnen TStringList nicht unbedingt gibt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#5

Re: TStringlist mit 60000 Einträgen zu langsam

  Alt 10. Feb 2010, 12:47
Zitat von himitsu:
Und jetzt kann man erstmal nur noch deine Verarbeitung versuchen zu optimieren, aber diese kenne wir noch nicht.
Eben. Ich denke, hier liegt der Flaschenhals. Vielleicht zeigts du mal etwas Code.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#6

Re: TStringlist mit 60000 Einträgen zu langsam

  Alt 10. Feb 2010, 12:48
Moin, moin,

Zu Listen gibt es in der DP einen interesanten Thread: Vergleich von Suchverfahren in Listen

Grüße // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: TStringlist mit 60000 Einträgen zu langsam

  Alt 10. Feb 2010, 12:49
Hallo,

ich würde mal MemCheck (oder FastMM) nehmen,
dann die Liste füllen und das Programm ohne List.Free beenden.
Dann bekommst du genau raus, wie viel Speicher die Liste braucht.

Oder für grobere Schätzung den Task-Manager nehmen.


Die 1 GB RAM könnten schon das Problem sein,
wenn Delphi auch noch offen ist.
Zumal du ja einen Teil der Strings in eine 2. Liste packst,
die dann auch noch Speicher frißt (ähem isst ).



Heiko
Heiko
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#8

Re: TStringlist mit 60000 Einträgen zu langsam

  Alt 10. Feb 2010, 13:24
Zitat von Daniel G:
Zitat von himitsu:
Und jetzt kann man erstmal nur noch deine Verarbeitung versuchen zu optimieren, aber diese kenne wir noch nicht.
Eben. Ich denke, hier liegt der Flaschenhals. Vielleicht zeigts du mal etwas Code.
Genau dies wird die Stelle sein, die Zeit kostet, da Stringoperationen nicht gerade sehr schnell sind.

Wenn ich in blaue rate, würde ich sagen, daß das Benutzen der StringListe selbt auch schon ein Fehler ist.
Du sagst in jedem Listeintrag steht ein String, der mit TAB getrennt drei Wörter enthält und du nur
diesen String auseinandernimmst, um an deinen gewünschten String zu kommen.

Du solltest eher eine Datenklasse mit drei Feldern benutzen und diese dann in TObjectList schreiben.
Der Vorteil der Datenklasse ist, daß du nicht mühsam etwas aueinander nimmst, sondern direkt den gewünschten Wert hast.

Beispiel:
Delphi-Quellcode:

type
  TMeineDaten = class
   public
     property Bezeichner: String;
     property Strasse: String;
     property Ort: String;
  end;

  ....

  ....
var
  myList: TObjectList;
...
  neueDaten := TMeineDaten.Create();
  neueDaten.Bezeichner := "Stefan";
...
  myList.add(neueDaten);
...
...
  for i := 0 to myList.Count-1 do
  begin
    datenAusListe := TMeinDaten(myList[i]);
    Edit1.Text := datenAusListe.Bezeichner;
    ....
  end;
...
Alles nur ein Beispiel. Ich denke das wird dein Problem sein.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: TStringlist mit 60000 Einträgen zu langsam

  Alt 10. Feb 2010, 14:09
Zitat von himitsu:
@Bernhard: StringList und nicht StringGrid (ich geh mal davon auß, daß er sich da nicht verschrieben hat)
Geh zur Wand und ...


Je nach Aktionen die du auf der Stringlist (Suchen, IndexOf, ...) machst wäre eine Hash-Table oder B-Tree günstiger.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
exilant

Registriert seit: 28. Jul 2006
134 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: TStringlist mit 60000 Einträgen zu langsam

  Alt 10. Feb 2010, 14:11
Zitat von friedemann2009:
Liebe Leute,

Mein Problem: Wenn ich die Liste durchgehe, dauert es ewig: >5 Minuten für 30000 Einträge (Netbook mit 1,4 Ghz und 1GB RAM).

Hat jemand eine Idee, wie ich das (SEHR) viel schneller hinbekomme?

Danke für Eure Mühe und Hilfe, viele Grüße,
friedemann

PS: Delphi 5
Also: Ich erzeuge hier eine Liste mit 500.000 Einträgen (zufällig erzeugte Strings). Das Füllen dauert auf einem
Acer nettop mit 1,6 Ghz und 1GB Ram gute 3 Sekunden, die Liste enthält danach ca. 65MB Daten.

Das durchsuchen der Stringliste nach einem ebenfalls zufällig generierten Teilstring mit anschliessendem umkopieren eines viertels der Liste in eine neue Liste in zufälligen Abständen dauert weniger als 1 Sekunde.
Am Rechner und an TStringlist kann es nicht liegen...
Anything, carried to the extreme, becomes insanity. (Exilant)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


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