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循环有关。 请以提高速度的方式帮助我。

+1

首先,我建议将'totalText'附加到'StringBuilder'中。或者,将文档保存为RTF并直接加载到'RichTextBox'中 - 它对设置器的速度非常缓慢 – DiskJunky

而不是

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

+0

感谢您的帮助,但不幸的是字符串生成器尚未加快加载速度。任何其他建议或额外信息 – BiKe

+0

Try @ DiskJunky的建议:将文档保存为RTF,然后直接将其加载到“RichTextBox”中。 –

+0

我已经使用@DiskJunky(谢谢)建议,解决方案要快得多。如果您有另一种方法来加固.doc文件,请不要犹豫分享。 – BiKe