前几天我问过以下问题: How to draw graphics as efficiently as possible in WPF
大家一致认为,使用Canvas作为主机对象与GeometryDrawing类相结合,我没有什么可担心性能的。
虽然在实施一个简单的测试后,我得出的结论是,应用程序仅在屏幕上的3000个对象上窒息。
在实现过程中,我注意到在将Canvas渲染之前我必须将GeometryDrawing对象封装在2个不同的对象(DrawingImage和Image)中,我认为这是阻塞点所在的位置。下面是我目前如何执行此操作的示例代码:
//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 :(得分:0)
我最终使用WPF作为界面,并使用SlimDX / XNA进行实际渲染。从它出来的库将在一段时间后可用。