【问题标题】:c# Load a .docx file into a richtextbox taking too longc#将.docx文件加载到richtextbox中花费太长时间
【发布时间】:2018-03-06 12:49:37
【问题描述】:

我打算将 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+ 页的文档大约需要 2 分钟。

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

【问题讨论】:

  • 首先,我建议将totalText 附加到StringBuilder 中。或者,将文档另存为 RTF 并直接加载到 RichTextBox - 在设置器上非常慢

标签: c# richtextbox openfiledialog .doc


【解决方案1】:

代替

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

【讨论】:

  • 感谢您的帮助,但不幸的是,字符串生成器并没有加快加载速度。任何其他建议或额外信息
  • 试试@DiskJunky 的建议:将文档另存为RTF,然后直接加载到RichTextBox
  • 我使用了@DiskJunky(谢谢)的建议,解决方案要快得多。如果您有另一种方法来加快 .doc 文件加载,请不要犹豫分享。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多