C# 如何有效地将一个巨大的字符串添加到文本框中?

C# 如何有效地将一个巨大的字符串添加到文本框中?,c#,string,textbox,C#,String,Textbox,我有一个巨大的字符串(我们说的是长度为1696108个字符),我从一个文本文件中很快地读取了这个字符串。当我把它添加到我的文本框(C#)中时,它需要很长时间才能完成。像记事本++(我知道是非托管代码)这样的程序几乎可以立即执行,尽管记事本也需要很长时间。如何才能有效地添加这个巨大的字符串,以及记事本++之类的东西是如何如此快速地添加的?最初,您可以只渲染UI中可查看的前n个字符(假设您有一个滚动文本框)。然后,启动一个单独的线程以异步方式渲染连续块 或者,您可以将其与文件中的输入流相结合。读取块

我有一个巨大的字符串(我们说的是长度为1696108个字符),我从一个文本文件中很快地读取了这个字符串。当我把它添加到我的文本框(C#)中时,它需要很长时间才能完成。像记事本++(我知道是非托管代码)这样的程序几乎可以立即执行,尽管记事本也需要很长时间。如何才能有效地添加这个巨大的字符串,以及记事本++之类的东西是如何如此快速地添加的?

最初,您可以只渲染UI中可查看的前n个字符(假设您有一个滚动文本框)。然后,启动一个单独的线程以异步方式渲染连续块

或者,您可以将其与文件中的输入流相结合。读取块并立即将其附加到文本框中。示例(不全面,但你明白了)


如果这是Windows窗体,我建议尝试RichTextBox作为文本框的替代品。在过去,我发现它在处理大型文本时效率更高。另外,在进行修改时,请确保使用经过时间测试的SelectionStart/SelectedText方法,而不是操纵Text属性

rtb.SelectionStart = rtb.TextLength;
rtb.SelectedText = "inserted text"; // faster

rtb.Text += "inserted text"; // slower

记事本和窗口文本框类针对64K文本进行了优化。你应该使用RichTextBox

rtb.SelectionStart = rtb.TextLength;
rtb.SelectedText = "inserted text"; // faster

rtb.Text += "inserted text"; // slower