有没有办法加快在winforms文本框中显示大量文本?

有没有办法加快在winforms文本框中显示大量文本? 我的应用程序读取一个文件(可以大到20MB),然后将其显示到文本框(TextBoxX.Text = fileText;)。

显示文本的过程非常缓慢,有时需要几分钟。 问题是这个应用程序旨在快速向用户显示文件中的大量文本。

有没有办法更快地做到这一点? 也许使用某种缓存?

代码变化最小的解决方案是将整个文件内容读入变量,然后在每次迭代中调用Application.DoEvents()的循环中将内容的“块”附加到文本框中。

您仍然可以在加载时显示“正在加载请稍候…”消息,DoEvents调用将确保您的应用程序不会在同时“冻结”。

我知道这个问题现在已经很久了,但我想补充一些我认为可能对其他人有帮助的信息。

如果设置WordWrap = false,在某些情况下性能会显着提高。 当达到最大限制时,它仍将包裹长行。 我尝试了一些90K长的文本,其中包括一大块Base64数据,响应从16秒变为2秒。

如果您想将大量文本放入TextBoxText属性是邪恶的。 相反,您应该以块的forms读取文件并使用AppendText()函数添加它们。

如果你进一步将文件读取过程放入一个逐行读入文件的BackgroundWorker然后报告ReportProgress中的每一行,你可以在那里实现AppendText(),它应该做得更顺畅。

更新

经过一些编码和测试后,我不得不承认上述方法听起来不错,但TextBox在每个AppendText()之后需要这么多的渲染时间,这只是不起作用。

但是如果你对使用第三方控件没有任何问题,你应该看看Scintilla.Net 。 它对大文本文件没有任何问题,并且在这些情况下表现更好。

我认为只有一种方法 – 构建自己的控件(或者可能有一个)来显示文本的小部分(比如在远程管理器中,当你打开超大文件时)。

您定义了一个“窗口” – 例如500个字母,当您使用滚动条更改位置时,您可以更改yourtextbox的主体并显示文本的另一部分。

看看LockWindowUpdate函数,一旦将文本添加到文本框中,别忘了解锁。

http://msdn.microsoft.com/en-us/library/dd145034%28v=vs.85%29.aspx

我认为即使通过记事本打开,一个20Mb的文件也会有明显的延迟。

添加有关读取数据块的建议(这是大数据的最佳选择……就像在网络下载中certificate的那样)..

您可以在读取模式下将文本文件作为文件流打开..然后在循环中读取1mb或更少的字节内容..并将内容添加到文本框中。

伪代码:

while(不是文件结尾){string content =从流中读取1024 * 1024字节..将其转换为ascii编码。

textbox.text + = content

}

刚刚遇到这个问题,另一个可能的解决方法是使用RichTextBox。 与直观相反,考虑到与普通TextBox相比可以处理的更多内容,将RichTextBox的Text属性设置为非常大的字符串几乎是即时的。