며칠 전 나는 다음과 같은 질문을 : 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를 사용한다고 지적했습니다.
고마워요!
Microsoft의 예에 따라 Image.Freeze()를 사용하면 조금 도움이되지 않습니다. –
아마도이 가상화 된 캔버스가 도움이 될까요? http://blogs.msdn.com/b/jgoldb/archive/2008/03/08/performant-virtualized-wpf-canvas.aspx –