2011-09-12 2 views
1

며칠 전 나는 다음과 같은 질문을 : How to draw graphics as efficiently as possible in WPF은 (성능 현명한)

합의했다 그 조합 GeometryDrawing와 호스트 객체로 캔버스를 사용하여 수업에는 성과를 두려워 할 것이 아무것도 없었습니다.

단순한 테스트를 구현 한 후, 응용 프로그램이 화면에 표시된 객체 3000 개에 불과하다는 결론에 도달했습니다.

구현 중에 Canvas를 렌더링하기 전에 두 개의 다른 객체 (DrawingImage 및 Image)에 GeometryDrawing 객체를 캡슐화해야한다는 것을 알았습니다. 이것이 초초 점이라고 생각합니다.

//Node 
GeometryDrawing geoNode = new GeometryDrawing(
    new SolidColorBrush(Utils.IntToColor(graphNode.Color)), 
    new Pen(Brushes.Black, graphNode.Thickness), 
    new EllipseGeometry(new Point(graphNode.Position.X, graphNode.Position.Y), 16, 16) 
); 

Image imageNode = new Image 
{ 
    Source = new DrawingImage(geoNode), 
}; 

SetLeft(imageNode, graphNode.Position.X); 
SetTop(imageNode, graphNode.Position.Y); 

Children.Add(imageNode); 

내 질문

은 다음과 같습니다 :

  • 캡슐화 된 GeometryDrawing 그들을 렌더링 얻을 수있는 적절한 방법은 객체 아래 나는이 현재 수행 방법에 대한 예제 코드는?

  • 캡슐화하지 않고도 (예 : Canvas 이외의 다른 것) 내 GeometryDrawing 객체를 더 빠르게 표시 할 수 있습니까?

  • WPF를 사용하여 3000 개의 화면 개체를 사용하면 성능이 좋을 것으로 예상됩니까? 적절한 2D 엔진이 10000 개의 객체를 렌더링 할 수 있고 여전히 원활하게 실행될 수 있기 때문에 높은 수치는 아닙니다. 게다가 WPF는 "아래에서"DirectX를 사용한다고 지적했습니다.

고마워요!

+0

Microsoft의 예에 따라 Image.Freeze()를 사용하면 조금 도움이되지 않습니다. –

+0

아마도이 가상화 된 캔버스가 도움이 될까요? http://blogs.msdn.com/b/jgoldb/archive/2008/03/08/performant-virtualized-wpf-canvas.aspx –

답변

0

나는 인터페이스를 위해 WPF를 사용하고 SlimDX/XNA를 실제 렌더링에 사용했다. 이것에서 나온 라이브러리는 나중에 사용할 수있게 될 것입니다.

관련 문제