c#将.docx文件加载到richtextbox中需要太长时间

时间:2017-09-25 14:02:01

标签: c# richtextbox openfiledialog .doc

我打算将word文档加载到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页以上的文档。

它可能与for循环有关。 请帮助我提高速度。

1 个答案:

答案 0 :(得分:0)

而不是

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对象维护一个缓冲区以适应字符串的扩展。如果房间可用,则将新数据附加到缓冲区;否则,分配一个新的,更大的缓冲区,将原始缓冲区中的数据复制到新缓冲区,然后将新数据附加到新缓冲区。