我写了一个文件处理程序
大致的意思就是遍历文件夹,找到我想要的文件
然后把文件的详细路径一个个输出到TextBox.Text里面,我用的方法是这样for( .... )
TextBox1.Text += fileName + "\r\n";但随着找到的文件数量增多,系统就会越来越慢~非常慢~
因为每次字符串连接操作都要串建一个新字符串~
不知道怎么能解决这个问题,
或者用什么别的方式解决这个问题?我的目的就是:
能即时看到程序现在在干什么,而且能知道程序都干了些什么~(最好能拷贝这些信息)
大致的意思就是遍历文件夹,找到我想要的文件
然后把文件的详细路径一个个输出到TextBox.Text里面,我用的方法是这样for( .... )
TextBox1.Text += fileName + "\r\n";但随着找到的文件数量增多,系统就会越来越慢~非常慢~
因为每次字符串连接操作都要串建一个新字符串~
不知道怎么能解决这个问题,
或者用什么别的方式解决这个问题?我的目的就是:
能即时看到程序现在在干什么,而且能知道程序都干了些什么~(最好能拷贝这些信息)
解决方案 »
- C# 继承类 的事件问题
- Access如何用“SQL”删除表
- c#重画窗体的问题
- 普通窗体模仿MDI窗体工作。
- 将object数组内容插入到表中跟表的列(color,amount,Style)一一对应
- 清除session cookie
- webbrowswer中加载的html 中某个控件值发生了变化(例如:文本框里的文字由“男”变成“女”),能得到更改后的值吗?
- DataGridView控件在操作完数据库的数据之后,是不是每次都要重新绑定一次才能体现更新?
- 求算法!
- 怎样获得我在dataGrid选中的所有行的行号?
- 菜鸟问题:在web应用程序中如何动态设定textbox的位置?
- 如何像BT一样实现设置Internet 连接共享 ??
-----------------------
有依据吗?
for( .... )
tempString += fileName + "\r\n";
TextBox1.Text=tempString;和你的for( .... )
TextBox1.Text += fileName + "\r\n";一样慢吗?我怀疑你说的所谓“慢”根本不是字符串处理的问题造成的,字符串处理方法对你的“慢”来说是很可能只是个似是而非的解答。
for( .... )
tempString += fileName + "\r\n";
TextBox1.Text=tempString;中的 for 和 .Text=... 单独设置两个计时器看看各花费多少时间。
如果使用textbox1.AppendText("hello")效果一样,但每次只需画新添加的字符,速度当然快得多。
debug.print(now)
for i as int32 =0 to 10000
richtextbox1.append("hello")
next
debug.print(now)
输出:
2006-9-3 16:55:19
2006-9-3 16:55:43
而如果使用
richtextbox1.text &="hello"
输出:
2006-9-3 16:56:25
然后10分钟后都没执行完毕,我中断了程序,你们有兴趣可以试一下
----------------------------------------------
我不太相信,只不过一个是预分配了内存而已,都是内存操作,有这么大区别吗?
TextBox1.Text += 操作!
我设置了MaxLength属性,都不听使唤~
如果用手输入,MaxLength就有效~
但速度还是越来越慢啊~
累计操作,就会变得很慢~
看来这个问题属于疑难杂症了~看下面这个调试程序就比较清楚了:private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.RichTextBox richTextBox2;private void button1_Click(object sender, System.EventArgs e)
{
for ( int i = 0 ; i < 10 ; i ++ )
{
richTextBox2.AppendText(
string.Format("第({0})用时:{1} \r\n",i.ToString() ,
printHello(1000).ToString() )); }
}private long printHello( int printCount )
{
long startTime = DateTime.Now.Ticks;
long endTime = 0; for ( int i = 0 ; i < printCount ; i ++ )
{
richTextBox1.AppendText("hello!");
} endTime = DateTime.Now.Ticks; return endTime - startTime;
}点击button1,结果:第(0)次用时:6093750
第(1)次用时:6562500
第(2)次用时:7187500
第(3)次用时:7656250
第(4)次用时:8281250
第(5)次用时:8906250
第(6)次用时:9531250
第(7)次用时:10156250
第(8)次用时:10781250
第(9)次用时:12031250 可以看到,速度是越来越慢~
这样的问题可以解决吗?
异步调用更新Textbox的显示信息,
使用
Textbox.AppendText 方法
或使用StringBuilder来保存字符串。
string tempString = string.Empty;
DateTime bt = DateTime.Now;
for (int i = 0; i < 10000; i++)
tempString += fileName + "\r\n";
textBox1.Text = tempString;
DateTime et = DateTime.Now;
MessageBox.Show(string.Format("TextBox += 用时 {0} 秒", ((TimeSpan)et.Subtract(bt)).TotalSeconds));
bt = DateTime.Now;
for (int i = 0; i < 10000; i++)
textBox1.AppendText( fileName + "\r\n");
et = DateTime.Now;
MessageBox.Show(string.Format("AppendText() 用时 {0} 秒", ((TimeSpan)et.Subtract(bt)).TotalSeconds));
bt = DateTime.Now;
for (int i = 0; i < 10000; i++)
textBox1.Text += fileName + "\r\n";
et = DateTime.Now;
MessageBox.Show(string.Format("TextBox += 用时 {0} 秒", ((TimeSpan)et.Subtract(bt)).TotalSeconds));
string tempString = string.Empty;
DateTime bt = DateTime.Now;
for (int i = 0; i < 10000; i++)
tempString += fileName + "\r\n";
textBox1.Text = tempString;
DateTime et = DateTime.Now;
MessageBox.Show(string.Format("tempString += 用时 {0} 秒",
((TimeSpan)et.Subtract(bt)).TotalSeconds));
bt = DateTime.Now;
for (int i = 0; i < 10000; i++)
textBox1.AppendText(fileName + "\r\n");
et = DateTime.Now;
MessageBox.Show(string.Format("AppendText() 用时 {0} 秒",
((TimeSpan)et.Subtract(bt)).TotalSeconds));
bt = DateTime.Now;
for (int i = 0; i < 10000; i++)
textBox1.Text += fileName + "\r\n";
et = DateTime.Now;
MessageBox.Show(string.Format("TextBox += 用时 {0} 秒",
((TimeSpan)et.Subtract(bt)).TotalSeconds));