2017-09-25 18 views
2

richtextbox에 단어 문서를로드하려고합니다.C# richtextbox에 .docx 파일을로드하는 데 너무 오래 걸리는 경우

다음 코드가 있습니다. 어느 것이 효과가 있겠지만,로드가 오래 걸릴 것입니다.

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 루프와 관련이있을 수 있습니다. 속도 향상 방법을 도와주세요. 대신

string totaltext = ""; 

for (int i = 0; i < docs.Paragraphs.Count; i++) 
{ 
    totaltext += "\t " + docs.Paragraphs[i + 1].Range.Text.ToString(); 
} 

richTextBox1.Text = totaltext; 

이용

+1

처음에는'totalText'를'StringBuilder'에 추가하는 것이 좋습니다. 또는 문서를 RTF 형식으로 저장하고 'RichTextBox'에 직접로드하십시오. 설정자에서 매우 느립니다. – DiskJunky

답변

0

이 :

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를 사용하는 것입니다. Mutability는 클래스의 인스턴스가 만들어지면 문자를 추가, 제거, 교체 또는 삽입하여 수정할 수 있음을 의미합니다. StringBuilder 객체는 문자열에 대한 확장을 수용 할 수 있도록 버퍼를 유지 관리합니다. 사용 가능한 공간이 있으면 새 데이터가 버퍼에 추가됩니다. 그렇지 않으면 더 큰 새 버퍼가 할당되고 원래 버퍼의 데이터가 새 버퍼에 복사되고 새 데이터가 새 버퍼에 추가됩니다.

+0

도움을 주셔서 감사합니다.하지만 불행히도 문자열 작성 도구가 로딩을 더 빨리 수행하지 못했습니다. 기타 제안 또는 추가 정보 – BiKe

+0

@ DiskJunky의 제안을 시도하십시오. 문서를 RTF 형식으로 저장 한 다음 'RichTextBox'에 직접로드하십시오. –

+0

@DiskJunky (감사합니다) 제안을 사용했지만 솔루션이 훨씬 빠릅니다. .doc 파일로드를 고정 할 다른 방법을 얻는다면 주저하지 말고 공유하십시오. – BiKe