Autor |
Beitrag |
trm
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Sa 21.07.12 22:47
Huhu. Ich weiß leider nicht, wonach ich suchen muss, damit ich meine Frage finde.
Anbei ein kleines Testprogramm, mit dem Stringkombinationen aus den verfügbaren Zeichen erzeugt werden.
Mein Prblem: viel zu langsam bei der Ausführung (4 Zeichen dauern schon extrem lange bei meinem DualCore).
Geht das in einer Art schneller, ohne, dass doppelte Worte vorkommen ?
Einloggen, um Attachments anzusehen!
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 22.07.12 00:12
Dass das so lange dauert, liegt daran, dass du die Ergebnisse direkt in das Memo schreibst. Das dauert eben.
Wenn du die stattdessen in eine Stringvariable schreibst und erst am Ende ins Memo, geht es deutlich schneller. 
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: So 22.07.12 01:02
Hm. Sowas vergesse ich immer wieder
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure P(var A: string; B: string); var J: Word; C, D: string; sl:TStringList; begin sl:=TStringList.Create; if Length(B) = SLen - R then begin sl.Add(A); Inc(x); end else for J := 1 to Length(B) do begin C := B; D := A + C[J]; Delete(C, J, 1); P(D, C); end; memo1.Lines.AddStrings(sl); sl.Free; end; |
Ist nun Dank der Stringlist erheblich schneller. Aber wenn ich mir andere Programme anschaue, die so etwas machen (sogar php-scripte), weiss ich nicht, wie das geht.
Würde es etwas nützen, wenn man Speicher vorbelegt?
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
Nano-Ware
      
Beiträge: 394
Erhaltene Danke: 7
|
Verfasst: So 22.07.12 10:59
Hey,
du könntest auch das Einlesen in die Stringlist in einem zweiten Thread erledigen und dann im Hauptthread die Memo-Ausgabe mit der StringList synchronisieren
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 22.07.12 13:54
Am schnellsten wäre es eine VirtualTreeView zu nehmen und die Werte gar nicht erst in der visuellen Komponente vorzuhalten. Dann reicht ein vorher auf die richtige Größe gebrachtes Array mit den Einträgen aus, das dann als Wertespeicher benutzt wird, bereits aus und du musst nur die entsprechende Anzahl Einträge in der TreeView erzeugen und in OnGetText die Strings aus dem Array holen.
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: So 22.07.12 14:45
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Wird das nicht auch über eine TStringList schon in einer nicht-Visuellen Komponente gemacht mit meiner letzten Änderung?
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 22.07.12 20:58
Nein, du kopierst den Text ja dennoch komplett in die visuelle Komponente, obwohl nur ein Teil davon angezeigt wird.
|
|
|