我是从一个流(由过程提供)逐个字符读取数据并将其添加到文本框,从而用户可以看到。唯一的问题是,这是的 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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top