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