如何防止可能导致内存不足的RichTextBox追加?

问题描述

| 我的目标是使用RichtextBox控件逐行保存日志,但是我担心当行到达特定点时,我的窗口窗体将被挂起或耗尽内存。 谁能告诉我如何防止这种情况发生,我想也许可以用FIFO限制300行,或者先限制500行然后清空并重新刷新。
    void WriteLog(string txt)
    {

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

解决方法

        如果要删除行而不是尝试使用此行
    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);
    }
    ,        尝试使用以下代码删除最后一行,然后附加文本,那么您的行数限制为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;
我希望这可以帮助你。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...