C# 如何防止RichTextBox追加导致OutOfMemory?

C# 如何防止RichTextBox追加导致OutOfMemory?,c#,winforms,richtextbox,C#,Winforms,Richtextbox,我的目标是使用RichtextBox控件逐行保存日志,但我担心当这些行到达某个点时,我的窗口窗体将被挂起或耗尽内存 有谁能告诉我如何防止这种情况发生,我想可能会限制使用FIFO的300行,或者500行,然后清空并再次刷新..但是我不确定如何实现这一点 void WriteLog(string txt) { richTextBox1.AppendText(txt + Environment.NewLine); richTextBox1.HideSe

我的目标是使用RichtextBox控件逐行保存日志,但我担心当这些行到达某个点时,我的窗口窗体将被挂起或耗尽内存

有谁能告诉我如何防止这种情况发生,我想可能会限制使用FIFO的300行,或者500行,然后清空并再次刷新..但是我不确定如何实现这一点

    void WriteLog(string txt)
    {

        richTextBox1.AppendText(txt + Environment.NewLine);
        richTextBox1.HideSelection = false;
        richTextBox1.SelectionStart = richTextBox1.Text.Length;
    }

请尝试此代码删除最后一行,然后追加文本,这样您将只有300行限制:

    private void RemoveLastLineAfter300()
    {
        if(richTextBox1.TextLength != 0)
        {
            int totalCharacters = richTextBox1.Text.Trim().Length;
            int totalLines = richTextBox1.Lines.Length;
            string lastLine = richTextBox1.Lines[totalLines - 1] + "\n";
            string copyOfLastLine = richTextBox1.Lines[totalLines - 1];
            if(totalLines > 300)
            {
                string newstring = richTextBox1.Text.Substring(0, totalCharacters - lastLine.Length);
                richTextBox1.Text = newstring;
            }
        }
    }
若你们想清除500行之后的文本(若我没插错),只需检查TextChanged事件

if(richTextBox1.Lines.Length > 500)
   richTextBox1.Text = string.Empty;

我希望这对您有所帮助。

如果您想删除行,请尝试使用此选项

    void WriteLog(string txt)
    {
        if(richTextBox1.Lines.Count() == 100)
        {
            DeleteLine(0);
        }
        richTextBox1.AppendText(txt + Environment.NewLine);
        richTextBox1.HideSelection = false;
        richTextBox1.SelectionStart = richTextBox1.Text.Length;
    }

    private void DeleteLine(int a_line)
    {
        int start_index = richTextBox1.GetFirstCharIndexFromLine(a_line);
        int count = richTextBox1.Lines[a_line].Length;

        // Eat new line chars
        if (a_line < richTextBox1.Lines.Length - 1)
        {
            count += richTextBox1.GetFirstCharIndexFromLine(a_line + 1) -
                ((start_index + count - 1) + 1);
        }

        richTextBox1.Text = richTextBox1.Text.Remove(start_index, count);
    }
void WriteLog(字符串txt)
{
如果(richTextBox1.Lines.Count()==100)
{
DeleteLine(0);
}
richTextBox1.AppendText(txt+Environment.NewLine);
richTextBox1.HideSelection=false;
richTextBox1.SelectionStart=richTextBox1.Text.Length;
}
专用void DeleteLine(内线)
{
int start_index=richTextBox1.GetFirstCharIndexFromLine(一行);
int count=richTextBox1.Lines[a_line]。长度;
//吃生菜
if(a_行
此代码非常昂贵。最好在单独的变量中跟踪行数。当达到极限时,移除一半管线。