Ich habe eine App geschrieben, die eingehenden Chat liest (etwas wie ein Instant Messenger), formatiert es und fügt es in eine Richtextbox ein. Wenn Sie das Programm lange genug laufen lassen, erhalten Sie einen Speichermangel. Nachdem ich meinen Code angeschaut habe, denke ich, dass ich die Richtextbox niemals beschneide. Das Problem, auf das ich stoße, ist, dass ich nicht clear() aufrufen möchte, weil ich nicht möchte, dass der sichtbare Text verschwindet. Ich dachte, vielleicht sollte ich eine Liste mit einer maximalen Größe von etwa 200 Zeilen führen. Diese Liste würde den letzten Chat behalten. Wenn das Chatprotokoll zu groß wird, rufen Sie clear auf und fügen Sie die letzten 200 Zeilen erneut ein. Bevor ich jedoch diesen Gedanken ausführe, frage ich, ob jemand eine bessere Lösung kennt. Irgendwelche Gedanken?C# richtextbox outofmemory
2
A
Antwort
3
würde ich wahrscheinlich wie folgt vor:
- Catch the
RichTextBox.TextChanged
Ereignis - in dem Handler, überprüfen Sie die Anzahl der Zeilen (
RichTextBox.Lines.Length
) - Wenn dies Ihr Maximum überschreitet, entfernen Sie das erste.
Viel Glück!
+0
Danke, das funktioniert perfekt – poco
0
Während ich mit der akzeptierten Antwort zustimmen, wollte ich ein Codebeispiel schaffen eine Klarstellung zu zeigen:
private void rtbChatWindow_TextChanged(object sender, EventArgs e)
{
int maxLines = 200;
if (rtbChatWindow.Lines.Length > maxLines)
{
string s = rtbChatWindow.Lines.First();
rtbChatWindow.Text = rtbChatWindow.Text.Remove(0, s.Length).Trim();
}
}
Stellen Sie sicher, rufen Trim(), nachdem Sie den Text entfernen, ansonsten wird die erste Textzeile wird Leerzeichen, was dazu führt, dass dies nicht funktioniert.
Verwandte Themen
- 1. C# RichTextBox Textblockauswahl
- 2. RegExp C# und richtextbox
- 3. OutOfMemory Ausnahme
- 4. richTextBox Anzahl der Zeichen?
- 5. Coloring Text in RichtextBox, C#
- 6. C# winforms button und richtextbox
- 7. Autoscrolling in RichTextBox C# WinForms
- 8. RichTextBox
- 9. Benutzersteuerung mit RichTextBox, bindbare RichTextBox
- 10. Neo4j OutOfMemory Problem
- 11. ContextMenuStrip on Benutzersteuerung mit Richtextbox C#
- 12. C# WYSIWYG-Editor mit Webbrowser und richtextbox
- 13. C#/WPF: Richtextbox: Finde alle Bilder
- 14. Eine Textbox/Richtextbox mit Syntax-Highlighting? [C#]
- 15. Wie puffere ich eine RichTextBox in C#?
- 16. RichTextBox Bildlaufleiste Bild als Hintergrund C# wpf
- 17. C#/WPF: Text-Wrap von RichTextBox deaktivieren
- 18. Android OutOfMemory Fehler & LRUCache
- 19. android listview OutOfMemory - ImageBitmaps
- 20. .net OutOfMemory Ausnahme
- 21. Recyclerview + Picasso outofmemory Fehler
- 22. Permutation Algorithm OutOfMemory Exception
- 23. PDFsharp Dokument outofmemory Ausnahme
- 24. InputStream und OutOfMemory Fehler
- 25. Java OutOfMemory Exception Wenn Zwischenablage
- 26. C#/UWP OutOfMemory bei Änderung ListView in horizontale
- 27. Deserialize von MemoryStream wirft OutOfMemory-Ausnahme in C#
- 28. Celsius-Symbol in RichTextBox
- 29. Windows Forms RichTextBox Cursorposition
- 30. RichTextBox Farbe ausgewählte Zeilen
Die MaxLength-Eigenschaft ist wahrscheinlich am ehesten für die Steuerung des Strings verantwortlich. Aber es ist wahrscheinlich eine schlechte Wahl. Im Grunde genommen scheint es am besten zu sein, es selbst zu verwalten. – doobop
Wirklich? Du hast nicht mehr genug Speicher, nur um zu chatten? Senden Ihre Nutzer Chats per Megabyte ?! – Mehrdad
Das ist, was ich zuerst dachte, passiert nicht sofort, hängt davon ab, wie viel Speicher Sie haben. Für mich musste meine App für ein paar Tage geöffnet sein, aber einer meiner Freunde, der nur 1 Gig-Speicher hat, sagt, dass er innerhalb von 8 Stunden mit einer Ausnahme wegen zu wenig Speicher abstürzen würde. Da ich die Änderung gemacht habe, scheint es richtig zu funktionieren – poco