Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#14

Re: Wörter zählen, optmimieren?

  Alt 20. Okt 2004, 08:52
Zitat:
bei jeder Art Stringliste, eben auch RichEdit.Lines, wird die Eigenschaft Text bei jedem Lesezugriff auf diese Eigenschaft aus den gesamten Strings zusammengesetzt, und bei jedem Schreibzugriff werden die Zeilen anschliessend neu aufgebaut.
Das ist das, was so auf die Performance drückt.
Das stimmt für Delphis TStringList Objecte, aber eben nicht für RichtEdits. RichEdits verwalten intern den kompletten Textin einem linearen Speicher. Bei jedem Zugriff auf die Property .Text wird intern nun vom Windows API RichEdit Control der Text angefordert. Nun, das Windows API läuft bekannt bei Fensterhandles immer über Messages. D.h. .GetText muß mie SendMessage() arbeiten, intern wird dann der Text-Speicher in den vorher allozierten String kopiert. Pro Zugriff auf die Property .Text entstehen also 2 SendMessages (1 um die Größe des Textes zu holen, 1 um den Text zu holen) + eine Speicherallozierung eines LongStrings mit Setlength() und eine Speicherkopierung. Sollte der Text also 1Mb betragen, wird jedesmal beim Aufruf von .Text[I] ein neuer Speicherbereich mit 1Mb Daten kopiert.
Das das langsam sein muß ist ja wohl klar.

Gruß Hagen

PS: Variablen sind die Freunde des Programmierers
  Mit Zitat antworten Zitat