WPF : RichTextBox에 할당. 문서화가 매우 느립니다 (7 분!)
-
08-07-2019 - |
문제
형식을 구성하고 있습니다 FlowDocument
XML에서. XML은 잘 형성되며 주로 6 자 문자열 값을 갖는 단일 노드를 갖는 각각 10,000 개의 노드로 구성됩니다.
XML을 an에 구문 분석합니다 XElement
그리고 구성 FlowDocument
메모리에서 약 5 초가 걸립니다. 할당 FlowDocument
~로 Document
a의 속성 RichTextBox
내 응용 프로그램에서는 약 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;
여기서 무슨 일이 일어나고 있는지 궁금합니다. 나는 코드를 프로파일 링했고 다음과 같은 관리되지 않는 방법에 대한 수천 개의 호출을 봅니다. fsFormatSubtrackBottomless
그리고 SubtrackFormatParaBottomless
.
누구든지 문제에 대해 빛을 비추거나 해결 방법을 제시 할 수 있습니까?
해결책 2
결국, 나는 이것에 대한 해결책을 찾을 수 없었습니다.
나는 해결 방법을 사용하고 있습니다 - 나는 단순히 특정 크기에 걸쳐 "예쁜 인쇄"메시지를 "예쁜 인쇄"하지 않습니다.
누군가가 더 나은 솔루션을 가지고 있다면 자유롭게 게시하십시오.
다른 팁
맥도날드에서 발췌 한 다음 C# 2010의 프로 WPF 책, p. 966 :
WPF RichTextBox는 이전의 풍부한 텍스트 컨트롤과 마찬가지로 약간 느리게 될 수 있습니다. 엄청난 양의 데이터를 보유 해야하는 경우 복잡한 논리를 사용하여 주요 프레스를 처리하거나 자동 형식 (예 : Visual Studio의 구문 강조 표시 또는 Word의 철자 체커 밑줄)과 같은 효과를 추가하십시오. WPF RichTextBox는 아마도 필요한 성능을 제공하지 않을 것입니다..