2011-09-26 2 views
8

WPF를 사용하여지도 같은 응용 프로그램을 개발 중입니다. ~ 10,000 PathGeometry, 셰이프를 캔버스에 추가했습니다. 확대/축소 및 패닝 컨트롤을 위해 ScaleTransform 및 TranslateTransform을 추가했습니다.WPF 캔버스 성능 향상

내가 겪고있는 문제는 확대/축소 또는 이동시 약간의 지연이 있음을 나타냅니다. 내가 볼 수있는 셰이프 만 처리하도록 데이터를 구성하는 방법이 있습니까?

더 효율적으로 만드는 방법에 대한 힌트가 도움이 될 것입니다.

답변

7

가상 캔버스의 개념으로이 흥미로운 기사를 보시기 바랍니다 : ZoomableApplication2: A Million Items. 또한 라이브 (xbap) 데모를 온라인으로 제공합니다.

6

캔버스에 어떤 종류의 것들을 넣고 있습니까? pathGeometry를 사용하는 경우 경로 클래스에 해당 경로를 포함합니까? 그렇다면 Path는 대규모 성능 손실을 초래하는 수퍼 클래스 계층 구조에 FrameworkElement를가집니다.

Take a look at my question here.하지만 Shape 클래스 정도이지만 성능 저하의 이유는 FrameworkElement와 동일합니다.

이렇게하는 경우 해결 방법은 PathGeometry 대신 DrawingContext.DrawGeometry() 메서드를 사용하여 DrawingVisual의 DrawingContext로 묶는 것입니다.

다음은 도움이되는 몇 가지 링크입니다. 기하학 클래스 (ArcGeometry, PathGeometry 등)에서 파생 된 클래스에서 제공 Path Geometry

Optimizing Performance: 2D Graphics and Imaging

그리고 라인의 조합을 사용하여 모양을 직접 그리는 DrawingContext.DrawGeometry()

, 그리고 다른 것들.

도움이 될 것입니다.

2

WPF에서 즉각적인 드로잉을위한 최고의 성능을 원하는 경우 WriteableBitmapEx을 확인하십시오. 이것은 내가 최근에 공헌 한 우수한 오픈 소스 라이브러리입니다. WriteableBitmap에 GDI와 같은 그리기 기능을 제공하며 Windows Phone, WPF 및 Silverlight와 호환됩니다. API는 간단하고 블리 팅, 다각형, 선 및 간단한 모양 등을 얻을 수 있습니다. 그러나 데이터 형식 및 그래디언트 브러쉬는 얻을 수 없습니다.