c#将一个.docx文件加载到一个richtextbox时间过长
问题描述:
我打算将一个word文档加载到一个richtextbox中。c#将一个.docx文件加载到一个richtextbox时间过长
我有以下代码。哪一个是正在工作,但它需要很长时间才能加载。
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Word Documents|*.doc; *.docx";
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
object miss = System.Reflection.Missing.Value;
object path = ofd.FileName;
object readOnly = true;
Microsoft.Office.Interop.Word.Document docs = word.Documents.Open(ref path, ref miss, ref readOnly,
ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss,
ref miss, ref miss, ref miss, ref miss);
string totaltext = "";
for (int i = 0; i < docs.Paragraphs.Count; i++)
{
totaltext += "\t " + docs.Paragraphs[i + 1].Range.Text.ToString();
}
richTextBox1.Text = totaltext;
}
加载3页测试文档需要大约2分钟,并且加载60页以上的文档需要大约2分钟。
它可能与for循环有关。 请以提高速度的方式帮助我。
答
而不是
string totaltext = "";
for (int i = 0; i < docs.Paragraphs.Count; i++)
{
totaltext += "\t " + docs.Paragraphs[i + 1].Range.Text.ToString();
}
richTextBox1.Text = totaltext;
使用此:
var totaltextBuilder = new StringBuilder();
for (int i = 0; i < docs.Paragraphs.Count; i++)
{
totaltextBuilder.Append("\t " + docs.Paragraphs[i + 1].Range.Text.ToString());
}
richTextBox1.Text = totaltextBuilder.ToString();
从MSDN:
对于执行大量的字符串处理例程(如修改字符串无数次的应用一个循环),重复修改一个字符串可能会严重影响性能。另一种方法是使用StringBuilder,它是一个可变的字符串类。可变性意味着一旦创建了类的实例,就可以通过追加,删除,替换或插入字符来修改它。一个StringBuilder对象维护一个缓冲区以适应字符串的扩展。如果空间可用,新数据将附加到缓冲区;否则,分配一个新的,更大的缓冲区,将来自原始缓冲区的数据复制到新缓冲区,然后将新数据附加到新缓冲区。
首先,我建议将'totalText'附加到'StringBuilder'中。或者,将文档保存为RTF并直接加载到'RichTextBox'中 - 它对设置器的速度非常缓慢 – DiskJunky