2011-09-12 28 views
1

前幾天我提出以下問題: How to draw graphics as efficiently as possible in WPF如何正確地在WPF繪製GeometryDrawing在Canvas(性能明智)

的共識是,使用畫布作爲主機對象結合GeometryDrawing我沒有什麼可怕的表現。

雖然在實施一個簡單的測試後,我得出的結論是應用程序在屏幕上只有3000個對象窒息。在實現過程中,我注意到我必須在兩個不同的對象(DrawingImage和Image)中封裝一個GeometryDrawing對象,然後才能使Canvas呈現它,我認爲這是chokepoint所在的位置。下面是我如何做到這一點目前是示例代碼:

//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對象,讓他們呈現的正確方法?

  • 有沒有更快的方式來顯示我的GeometryDrawing對象而無需封裝它們(例如Canvas以外的東西)?

  • 我是否期望太多,如果我想使用WPF的3000個屏幕上的對象有良好的性能?它對我來說看起來並不算很高,因爲一個合適的2D引擎可以渲染10000個對象,並且仍然可以流暢運行。此外,有人指出,「引擎蓋下」WPF使用DirectX。

謝謝!

+0

根據微軟的例子使用Image.Freeze()並沒有什麼幫助。 –

+0

也許這個虛擬化的畫布可以提供幫助嗎? http://blogs.msdn.com/b/jgoldb/archive/2008/03/08/performant-virtualized-wpf-canvas.aspx –

回答

0

我最終使用WPF作爲接口,並使用SlimDX/XNA進行實際渲染。從它出來的圖書館將在一段時間後提供。

相關問題