2010-01-19 62 views
4

我有一个巨大的字符串(我们正在谈论1696108字符的长度),我已经很快从文本文件中读取。当我将它添加到我的文本框(C#)时,需要很长时间才能完成。像记事本++(非托管代码,我知道)的程序几乎可以立即执行,但记事本也需要很长时间。我怎样才能有效地添加这个巨大的字符串,以及像Notepad ++这样的东西如此快速地实现呢?如何有效地将一个巨大的字符串添加到文本框?

回答

5

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

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(); 
    } 
} 
9

如果这是Windows窗体我建议试图RichTextBox中的下拉更换为您文本框。在过去,我发现它在处理大文本方面效率更高。此外,在进行修改时,请务必使用经过时间考验的SelectionStart/SelectedText方法,而不是操纵Text属性。

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

rtb.Text += "inserted text"; // slower 
相关问题