你往richTextBox1加入行时同时把索引值ID赋予richTextBox1的Tag,到时候读取时间就用Tag就可以了。如
if(richTextBox1.Tag ==1)
{
...........
}
if(richTextBox1.Tag ==1)
{
...........
}
解决方案 »
- 如何让获取的多网卡的信息(IP,mac,连接状态等)
- 有没有什么办法实时获取控制台输出信息
- 怎么解析Object对象里面放的数据集转换成dataTable
- SOCKET传输中的中文转换问题
- 有没有基于音频采集卡开发的高手,一个相当诡异的问题!!!!
- web开发经常遇到的问题
- C#中调用Word打印预览的问题,如何在用户关闭打印预览的同时,关闭word文档?
- 小弟初学C#,请各位热心的朋友不吝赐教:c#里用socket实现同https服务器的通信问题,分数不够可以再加。
- 在部署安装程序时如何实现安装程序检测MDAC的版本!!!
- 如何使得textbox中系统带的那个右键菜单去了?
- 如何利用后期绑定 Excel 打开或保存文件?
- 怎样把字符串"2003.02.30"转换为DateTime
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();上面只是一个示例性的代码,根据你的情况调整...
string[] lines = richTextBox1.Lines;//获取一个副本
string linestr="";
for (int i=0;i<=linecount-1;i++)
{
linestr=lines[i];
}
string[] lines = richTextBox1.Lines;//获取一个副本
string linestr="";
for (int i=0;i<=linecount-1;i++)
{
linestr=lines[i];
}
{
linestr=lines[i];
}
主要慢在linestr=lines[i];因为对于string类型,每次赋值都会在托管堆上重新分配内存,然后再copy字符串。
用StringBuilder是先分配好内存(分配一次,内存分配很快),再Append的话是很快的(无需在分配内存)。因为大量多次分配内存,基于内存分配的算法,可能要进行大量的碎片处理,合并,移动已分配内存等动作,所以很慢!
========================================
问题在于循环访问Lines属性上面,Lines属性的Get访问器中有很多代码,所以循环访问此属性造成效率低下,循环前Copy一个副本,就不需要循环调用Get访问器linestr=lines[i]与String的内存分配没有关系,他这里只是测试,没有涉及到具体的代码,如果要连接字符串,那么StringBuidler会快一些,相对来说,调用9000次Lines属性的Get访问器与9000次字符串赋值的效率差异不是一个数量级,所以即使改用StringBuilder,效率也不会有明显的改善,但是创建一个副本而不循环调用Get访问器则会有明显的提高。
也是因为这个问题变慢的吗
如
richTextBox1预设在 form load 时会加载约5000行的字
string word=”hi”;
for(int I=0;I<5000;I++)
{
textBox1.Text+=richTextBox1.Find(word);
}
执行起来速速很慢
也是因为这个因素吗???
谢谢