用户界面变得更慢,甚至崩溃了很长时间



我正在使用.net 4.0和VS2010。

我的程序只是一个多线程get请求发件人,它更新bindingList,并通过datagridview显示列表。DataGridView处于虚拟模式。此外,我制作一个文本框和状态栏以显示请求的状态,一个请求通常在文本框中添加4-5行,并更改状态栏中的数字。

工作负载保持不变,每两秒的请求。该请求很快,大多数情况下只有一个请求脱颖而出。新的请求线程由最后一个旧请求线程调用。使用BeginInvoke和委托对UI进行了几次更新。

MyInvoke mi = new MyInvoke(change);
this.BeginInvoke(mi, new Object[] { true, "Row " + pos + " standing by...", (pos + 1),0 });

我在开始时在DataGridView上显示整个3000个请求,并使用内存使用30MB显示。当使用内存使用4XMB达到2xxx请求时,我可以看到状态栏编号和文本框更新速度较慢。例如,2000-> 2001-> 2002-> 2003变为2000-> 2003。

如果我选择了应用程序窗口,则有时整个UI甚至会冻结。我的DataGridView通过虚拟模式固定在几行上。我相信这是UI线程的问题。当它冻结时,我可以等到所有请求完成,一切都变得平稳。

对发生的事情有任何想法吗?

最后,我弄清楚了为什么这么慢。像我这样的菜鸟很容易犯这种错误。我在线程期间使用的大量开始效果确实会影响,但不足以冻结UI线程。

大量工作量主要由以下代码购买,每次都将整个文本分配给文本框

 textbox1.Text += "string"

以下代码可以解决

textbox1.AppendText("string")

最新更新