2011-01-10 63 views
2

我已經編寫了一個讀取傳入聊天(有點像即時通訊工具)的應用程序,對其進行格式化並將其插入到richtextbox中。如果你讓程序運行時間足夠長,你會得到一個內存不足的錯誤。在看我的代碼後,我認爲這是因爲我從不修剪RichTextBox。我遇到的問題是我不想調用clear(),因爲我不希望可見文本消失。我在想也許我應該保留一個像200行一樣大小的列表。此列表將保留最近的聊天。如果聊天記錄變大,請呼叫清除並重新插入最後200行。然而,在我實施這個想法之前,我會問有沒有人知道更好的解決方案。有什麼想法嗎?c#richtextbox outofmemory

+0

MaxLength屬性可能是最接近設置任何東西來使控件管理字符串。但是,這可能是一個糟糕的選擇。所以,基本上,自己管理它看起來是最好的方式。 – doobop 2011-01-10 01:30:31

+0

真的嗎?你只是爲了聊天而耗盡內存?你的用戶以兆字節發送聊天嗎?! – Mehrdad 2011-01-10 08:24:03

回答

3

我可能會做到以下幾點:

  1. 趕上RichTextBox.TextChanged事件
  2. 在處理程序中,檢查線(RichTextBox.Lines.Length
  3. 數量若超過您最大,刪除第一。

祝你好運!

0

雖然我接受的答案同意,我想提供一個代碼示例顯示出一些澄清:

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(); 
    } 
} 

確保您在調用TRIM()刪除文本,否則文本的第一行成爲導致這不起作用的空白空間。