2011-05-13 5 views
8

WPF에서 효율적인 로그 뷰어 컨트롤을 사용하여 메시지가 추가 될 때 실제 로그를 보여줍니다. 로그 시스템의 알림에 연결하는 것은 문제가되지 않지만 일단 로그 라인 수가 증가하면 로그 라인이 추가 될 때마다 로그 창이 크롤링됩니다.WPF의 효율적인 라이브 로그 뷰어

로그 알림 이벤트는 TextBox의 줄에 추가하거나 스크롤 막대와 비슷한 로그 문자열 (일부 메타와 함께)을 제공하기 만하면됩니다. 충분한 메모리가 있다고 가정하면 많은 수의 줄을 추가하면 메모리 문제가되지 않지만 줄 번호 10,000이 추가되면 시스템이 느려지는 것을 좋아하지 않을 것입니다.

TextBox를 간단한 문자열 종속성 속성에 바인딩하면 문자열이 MB 크기와 수천 줄에 도달하면 다소 느려지 게됩니다.

어떻게 효율적으로 WPF에서 이러한 컨트롤을 작성할 수 있습니까?

+0

관련을 : 무엇은 인 은 내가 EDIT2가

WCF 서비스에서 오는 메시지를 표시하는 내 프로젝트에 데이터 그리드를 사용 빨리 WPF에서 로그보기를 렌더링하는 방법?] (http://stackoverflow.com/questions/430609/what-is-a-fast-way-to-render-a-log-view-in-wpf) – publicgk

답변

11

왜 목록 상자를 사용하지 않습니까? 매번 로그 메시지를 추가하고이 컬렉션을 itemscontrol itemssource에 바인딩하는 컬렉션을 만드십시오.

편집 : 일부 Itemsscontrols가 property 다음 한 도움이 될 것입니다 :

<ListBox VirtualizingStackPanel.IsVirtualizing="True" /> 
+0

은 줄 번호 10,000을 추가 할 때 효율적으로 업데이트되는 목록 상자? 그렇다면, 그것이 작동해야한다고 생각합니다. – Holstebroe

+0

잘 컬렉션을 업데이트하고 있지만 itemsscontrol은 직접 업데이트하지 않습니다. 사용자는 전체 컬렉션의 일부만 보게됩니다. 가상화가 핵심입니다. 내 EDIT2보기 – blindmeis