@Jens Hartmann
Also früher war die Grenze bei 64kByte, keine Ahnung seit welchem
OS das nicht mehr ist. Zumindest bin ich früher dran gestoßen. Ich denke die Obergrenze dürfte die String-Größe sein, 100% sicher bin ich mir da aber nicht. Allerdings ist die Eigenschaft Text von TStrings ein String (bzw. das Ergebnis), also dürfte das stimmen.
Somit denke ich mir mal, dass if
TMemo.Lines.Count >= 2000 then TMemo.Lines.Delete[0]
nicht viel bringt, denn der Count ist nur der Count, und der ist Integer, also kann der Count theoretisch bis 2147483647 gehen. Vorher ist vermutlich die Kapazitätsgrenze des Strings erreicht.
Also ich würde die Länge von Text prüfen. Neigt sie ich der Obergrenze von Stringlänge, könnte man unten aufräumen. Aber Vorsicht! Man weiß ja nie wie viel Text dazu kommt.
Du könntest dir Capacity angucken, sie regelt den Puffer bei TStringList, evtl. auch
procedure TStringList.Grow;
, um zu sehen wie das regiliert wird.