c#richtextbox outofmemory

c#richtextbox outofmemory,c#,size,richtextbox,out-of-memory,C#,Size,Richtextbox,Out Of Memory,我编写了一个应用程序,可以读取传入的聊天信息(有点像即时通讯器),对其进行格式化并将其插入richtextbox。如果让程序运行足够长的时间,将出现内存不足错误。看了我的代码后,我想这是因为我从来没有修剪过richtextbox。我遇到的问题是我不想调用clear(),因为我不希望可见文本消失。我在想也许我应该保留一个最多200行的列表。此列表将保留最近的聊天记录。如果聊天日志变大,请调用clear并重新插入最后200行。然而,在我实现这个想法之前,我会问是否有人知道更好的解决方案。有什么想法吗

我编写了一个应用程序,可以读取传入的聊天信息(有点像即时通讯器),对其进行格式化并将其插入richtextbox。如果让程序运行足够长的时间,将出现内存不足错误。看了我的代码后,我想这是因为我从来没有修剪过richtextbox。我遇到的问题是我不想调用clear(),因为我不希望可见文本消失。我在想也许我应该保留一个最多200行的列表。此列表将保留最近的聊天记录。如果聊天日志变大,请调用clear并重新插入最后200行。然而,在我实现这个想法之前,我会问是否有人知道更好的解决方案。有什么想法吗?

我可能会做以下几点:

  • 捕获
    RichTextBox.TextChanged
    事件
  • 在处理程序中,检查行数(
    RichTextBox.lines.Length
  • 如果超过最大值,请删除第一个

  • 祝你好运

    虽然我同意接受的答案,但我想提供一个代码示例来说明一些问题:

    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(),否则第一行文本将变为空白,这将导致无法执行此操作。

    MaxLength属性可能是最接近于设置控件来管理字符串的属性。但是,这可能是一个糟糕的选择。所以,基本上,自己管理看起来是最好的方式。真的吗?你的内存不足,只是为了聊天?你的用户发送的聊天信息是兆字节吗?!这也是我一开始的想法,不会马上发生,这取决于你有多少记忆。对我来说,我的应用程序必须打开几天,但我的一个只有1G内存的朋友说,如果内存不足,他的应用程序将在8小时内崩溃。自从我做了改变,它似乎工作正常