你往richTextBox1加入行时同时把索引值ID赋予richTextBox1的Tag,到时候读取时间就用Tag就可以了。如
if(richTextBox1.Tag ==1)
{
   ...........
}

解决方案 »

  1.   

    如果先用StringBuilder类构造好字符串,则速度会有很大提高,如:int capicity=65535;
    System.Text.StringBuilder str=new StringBuilder(capicity);
    for (int i=0;i<richTextBox1.Lines.Length;i++)
        str.Append(richTextBox1.Lines[i]);string richstr=str.ToString();上面只是一个示例性的代码,根据你的情况调整...
      

  2.   

    Lines属性每次会重新计算,所以改成这样:int linecount=richTextBox1.Lines.Length;
    string[] lines = richTextBox1.Lines;//获取一个副本
    string linestr="";
    for (int i=0;i<=linecount-1;i++)
    {
       linestr=lines[i];
    }
      

  3.   

    Lines属性每次会重新计算,所以改成这样:int linecount=richTextBox1.Lines.Length;
    string[] lines = richTextBox1.Lines;//获取一个副本
    string linestr="";
    for (int i=0;i<=linecount-1;i++)
    {
       linestr=lines[i];
    }
      

  4.   

    我的意思是richTextBox1.Lines[i]命令本身慢!
      

  5.   

    timmy3310(Tim) 方法和楼主的方法没有本质的不通for (int i=0;i<=linecount-1;i++)
    {
       linestr=lines[i];
    }
    主要慢在linestr=lines[i];因为对于string类型,每次赋值都会在托管堆上重新分配内存,然后再copy字符串。
    用StringBuilder是先分配好内存(分配一次,内存分配很快),再Append的话是很快的(无需在分配内存)。因为大量多次分配内存,基于内存分配的算法,可能要进行大量的碎片处理,合并,移动已分配内存等动作,所以很慢!
      

  6.   

    对不起,关于这个问题我是知而不知其二,timmy3310 (50)的方法才是最正确和理解本质的方法,特澄清一下,另附timmy3310 关于此问题的深入解释:timmy3310的解释:
    ========================================
    问题在于循环访问Lines属性上面,Lines属性的Get访问器中有很多代码,所以循环访问此属性造成效率低下,循环前Copy一个副本,就不需要循环调用Get访问器linestr=lines[i]与String的内存分配没有关系,他这里只是测试,没有涉及到具体的代码,如果要连接字符串,那么StringBuidler会快一些,相对来说,调用9000次Lines属性的Get访问器与9000次字符串赋值的效率差异不是一个数量级,所以即使改用StringBuilder,效率也不会有明显的改善,但是创建一个副本而不循环调用Get访问器则会有明显的提高。
      

  7.   

    那请问C#在处理大量的字符串时
    也是因为这个问题变慢的吗

    richTextBox1预设在 form load 时会加载约5000行的字
    string word=”hi”;
    for(int I=0;I<5000;I++)
    {
    textBox1.Text+=richTextBox1.Find(word);
    }
    执行起来速速很慢
    也是因为这个因素吗???
    谢谢