我有一个庞大的字符串(我们说的是长度为1696108个字符),我已经从文本文件中快速阅读了。当我将它添加到我的文本框(C#)时,需要很长时间才能完成。像Notepad ++(非托管代码,我知道)这样的程序几乎可以立即完成,尽管Notepad也需要很长时间。我怎样才能有效地添加这个巨大的字符串,像Notepad ++这样的东西怎么这么快呢?
答案 0 :(得分:10)
如果这是Windows窗体,我建议尝试使用RichTextBox作为TextBox的替代品。在过去,我发现它在处理大文本方面更有效率。此外,在就地进行修改时,请务必使用经过时间考验的SelectionStart / SelectedText方法,而不是操纵Text属性。
rtb.SelectionStart = rtb.TextLength;
rtb.SelectedText = "inserted text"; // faster
rtb.Text += "inserted text"; // slower
答案 1 :(得分:6)
Notepad和Window TextBox类针对64K文本进行了优化。你应该使用RichTextBox
答案 2 :(得分:0)
最初,您可以只渲染UI中可见的前n个字符(假设您有一个滚动文本框)。然后,启动一个单独的线程以异步方式呈现连续的块。
或者,您可以将其与文件中的输入流组合。读取一个块并立即将其附加到文本框中。示例(不彻底,但你明白了)......
private void PopulateTextBoxWithFileContents(string path, TextBox textBox)
{
using (var fs = File.OpenRead(path))
{
using (var sr = new StreamReader(fs))
{
while (!sr.EndOfStream)
textBox.Text += sr.ReadLine();
sr.Close();
}
fs.Close();
}
}