hi On Wed, 09 Jul 2003 23:49:13 +0200 Andreas Pakulat <[EMAIL PROTECTED]> wrote:
> On 09.Jul 2003 - 20:26:50, Patrick Schnorbus wrote: > > Mir ist etwas aufgefallen: > > > > 1) Ein Programm oeffnen, welches QTextEdit benutzt (z.B. kwrite) > > 2) Mit top o.ae. den Speicherverbrauch messen. > > 3) Viel Text einfuegen, so dass der Speicherverbrauch hochgeht. > > 4) Den Text wieder entfernen > > 5) Der Speicherverbrauch bleibt konstant oben. > > > > Es scheint so, als ob sich QTextEdit bei Bedarf neuen Speicher zwar > > allokiert, ihn aber nicht wieder freigibt, wenn er nicht mehr > > benoetigt wird. Kann das jemand reproduzieren? > > Ich verwende Woody mit Qt 3.1.2. Das ist durchaus drin. Wenn es dich st�rt, w�rde ich einen eigenen Editor schreiben. Zum Speichern des Inhaltes kannst du zum Beispiel eine STL Rope verwenden. Wenn das doch zu viel Aufwand ist, so l�sche das QTextEdit und erzeuge ein neues. QString old=mytextedit->text(); delete mytextedit; mytextedit = new QTextEdit (this); mytextedit->setText(old); foolayout->insertbla(mytextedit,bla); irgendwie so. Eine ordentliche Editor Speicherverwaltung w�re zum Beispiel: Sobald der Edit Puffer �berl�uft, verdoppele seine gr��e. Sobald der Edit Puffer nur ein Viertel gef�llt ist, halbiere seine gr��e. Aber eine STL Rope sollte einfacher sein als alles selber zu machen und auch effizienter. Ich selbst habe f�r einen Editor mal zwei Auslagerungsstapeldateien verwendet. Der Bereich, der gerade editiert wird ist im Speicher. Er ist aber nicht gr��er als 32 KB (war ein DOS-Editor). Wenn man ein Zeichen einf�gt, so werden die Zeichen in diesem Puffer nach rechts umkopiert und das Zeichen an der richtigen Stelle eingef�gt. L�uft der Puffer �ber, so wird das �berlaufende auf den linken oder rechten Auslagerungsstapel gesetzt. Will man auf Zeichen links vom Puffer zugreifen, so wird rechts ausgelagert und links eingelagert (immer eine gewisse PAGESIZE gross), bis man angekommen ist. Ergo ist insert und delete immer gleicheffizient, egal wieviele Terrabytes der Text gross ist. Aber wehe du moechtest an den anfang oder das ende der datei springen, dann musst du die ganzen Stapel durchrollen. �brigens ist Laden und Speichern solcher Files auch mit einem durchrollen verbunden... Die STL Rope ist irgendwie so �hnlich, nur aber komplett im Speicher. Aber evtl. kann man das korrigieren. Doku ist ziemlich gut. �brigens das mit dem QTextEdit ist kein Memory Leak, denn der delete des QTextEdit gibt den Speicher frei. Aber wenn du deine Qt-Programme mal mit "valgrind" (debian paket) laufen l�sst, so findest du echte Leaks :-) cya! erik -- Erik Thiele -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)

