阅读大量文字和更新文本框
题
我是从一个流(由过程提供)逐个字符读取数据并将其添加到文本框,从而用户可以看到。唯一的问题是,这是的 SLOW 即可。用户需要看到的数据,因为它是对方案(几乎没有延迟)。我想是这样的终端如何处理文本,它可以通过如此之快,这是一个模糊的滚动。
我怎么能提高呢?
有关参考,我使用C#.NET3.5和WinForms。
解决方案
文本框的Text
属性是一个字符串,字符串是不可变的(意味着你不能改变一个字符串)。这意味着,在每次添加一个字符时间,将很创建字符串与在末尾添加一个字符的新副本。
如果你具有例如在文本框中的字符10000,你将复制数据的20KB添加下一个字符。一次添加一百字符中的一个装置,数据的复制2MB。
如果该数据是基于行,使用一个列表,而不是一个文本框,让你只有当您添加字符以更新的最后一行。
其他提示
在一个多文本框,你会通过选择追加字符得到表现稍好:
textBox1.Select(textLength, 0);
textBox1.Selectedtext = newText;
textLength += newText.Length;
但正如你所看到的,你就必须自己跟踪的长度,如果你允许控制字符(如退格键)这种方法可能会打破。
我建议首先利用列表框的Guffa的想法。
某些代码,将有助于找出瓶颈是什么。
这是说,我想尝试沿着这些线路的东西(我不会建议复制/粘贴,因为我不能在这里进行测试):
// Stream s...
byte[] buffer = new buffet[bufferSize];
s.BeginRead(b, 0, buffer.Length,
delegate
{
if (textBox1.InvokeRequired)
{
textBox1.Invoke(
new MethodInvoker(
delegate
{
textBox1.Text = Encoding.Unicode.GetString(b);
}));
}
else
{
textBox1.Text = Encoding.Unicode.GetString(b);
}
}, null);
不隶属于 StackOverflow