Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: So 22.07.12 01:02 
Hm. Sowas vergesse ich immer wieder :(

ausblenden 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;
    { P(N,N) >>  R=Slen  }
    if Length(B) = SLen - R then
    begin
      sl.Add(A); {Per++}
      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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: So 22.07.12 14:45 
Moderiert von user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.