2011-02-02 4 views
0

저는 약 20000 개의 사각형을 렌더링하는 WPF (.NET 3.5) 컨트롤이 있습니다. 이 MyControl은 Canvas에서 파생되었습니다. 나는이 같은 MyControl에 자식으로 MyVisualsHost을 가하고있어 :DrawingVisuals 호스트 및 레이아웃 성능

public class MyControl : Canvas 
{ 
    private readonly MyVisualsHost host = new MyVisualsHost(); 
    private List<MyVisual> items = Enumerable.Range(0, 20000).Select(...).ToList(); 
    public MyControl() 
    { 
     this.Children.Add(host); 
    } 
} 

그래서, 나는 그리드에 또는 Window.Content로 퍼팅하고 있는데 그것은 (1 초) 매우 빠른 항목을 렌더링합니다. 창 크기를 조정할 때 사각형이 다시 배열되고 다시 그려집니다 (1 초 단위).

하지만 MyControl와 함께 XAML에 콤보 상자를두고있을 때 :

<Grid> 
    <ComboBox/> 
    <MyControl /> 
</Grid> 

를 재 배열에 렌더링하는 것은 아래로 5-10초에 속도가 느려집니다.

누구나 그것에 대해 알고 있나요? 미리 감사드립니다.

P. 데모 프로젝트를 다운로드 할 수 있습니다 Here

답변

1

오케이. 나는 그것을 관리했다. 각 비주얼은 개/폐하기 때문에 자신의 DrawingContext이고 너무 많은 시간이 걸렸습니다. OnRender 메서드에 인수로 전달 된 VisualHost의 DrawingContext 인스턴스를 사용하도록 Visual의 렌더링 코드를 변경했을 때 다시 20000 개의 Visual을 렌더링하는 데 1-2 초가 걸렸습니다. 그런 모든 렌더링 알고리즘을 사용하기 때문에 히트 테스트 기능을 잃어 버렸습니다.