2009-10-28 3 views
3

XML로 서식이 지정된 FlowDocument을 생성 중입니다. XML은 잘 형성되었으며 주로 6 개의 문자열 값을 가진 단일 노드로 각각 10,000 개의 노드로 구성됩니다.WPF : RichTextBox.Document에 대단히 느리게 지정 (7 분!)

XML을 XElement으로 구문 분석하고 FlowDocument을 메모리에 구성하는 데 약 5 초가 걸립니다. 내 응용 프로그램에서 RichTextBoxDocument 속성에 FlowDocument을 할당하면 약 7 분이 걸리고 그 시간 동안 CPU가 최대가됩니다. 내가 여기에 무슨 일이 일어나고 있는지 궁금하네요

// The following six lines of code execute in about 5 seconds 

var xml = XElement.Parse(response.Data); 

PrettyXmlConverter px = new PrettyXmlConverter(); 
FlowDocument fd = px.Render(xml); 

Paragraph p = new Paragraph(); 
p.Inlines.Add(new Run(response.TimeStamp.ToShortDateString() + " " + response.TimeStamp.ToLongTimeString())); 
fd.Blocks.InsertBefore(fd.Blocks.ElementAt(0), p); 

// This line of code takes about 7 minutes and maxes out the CPU for that time. 
tbResponse.Document = fd; 

:

여기에 코드의 관련 부분이다. 코드를 프로파일 링하고 fsFormatSubtrackBottomlessSubtrackFormatParaBottomless과 같은 관리되지 않는 메소드에 대한 수천 건의 호출을 참조하십시오.

누구든지 문제를 해결하거나 해결 방법을 제안 할 수 있습니까?

답변

0

결국 나는 해결책을 찾지 못했습니다.

해결 방법을 사용하고 있습니다. 특정 크기 이상의 메시지를 단순히 인쇄하지는 않습니다.

더 좋은 해결책이있는 분은 언제든지 게시하십시오.

1

MacDonald 's Pro WPF in C# 2010 도서에서 발췌 한 내용. 966 :

WPF RichTextBox는 이전에 사용 된 대부분의 서식있는 텍스트 컨트롤과 마찬가지로 약간 느릴 수 있습니다. 엄청난 양의 데이터를 보유해야하는 경우 복잡한 논리를 사용하여 키 누르기를 처리하거나 자동 서식 지정 (예 : Visual Studio의 구문 강조 표시 또는 Word의 맞춤법 검사기 밑줄 표시)과 같은 효과를 추가하면 WPF RichTextBox에서 제공하지 않을 수 있습니다 필요한 성능은입니다.

+0

좋아요, 그렇다면 좋은 대안이 무엇입니까? – leetNightshade

+1

@leetNightshade : 글쎄, 이것은 유료 광고로 당신이 그것을 구글로 올 때 일어나는 것이다 : http://www.textcontrol.com/en_US/sites/dotnet-rich-text-editor-control/?gclid=CP668O7M2rgCFUVb3godDRkAAg I 또한 코드 플렉스와 코드 프로젝트에서 사용할 수있는 오픈 소스 소스가 있다는 것을 알고 있으며, 이름을 기억할 수 없습니다. – Sabuncu

+1

흠, 좋은 찾기! 나는 당신이 공유 한 것 (나는 아직 시도하지 않았다)과 다른 용도로 대안을 찾을 수 있었다. https://github.com/PavelTorgashov/FastColoredTextBox – leetNightshade