我正在使用FrameworkElement:DrawingVisual绘制一些矢量数据,略低于9000个多边形对象,而DrawingVisual又是Canvas对象的子节点。我的物体树看起来像这样:
WPF Window
-Canvas
--FrameworkElement
---DrawingVisual -> DrawingContext.DrawGeometry
到目前为止一切顺利。我正在计算所有的渲染方法,它与预期的一样,为DrawingContext做0.32秒,总共0.5秒。将EdgeMode设置为默认值(消除锯齿)后,完成的绘图将在半秒后出现在我的画布上。
但是,因为我需要对所有行进行别名,所以我使用RenderingOptions.SetEdgeMode到EdgeMode.Aliased on canvas对象。
这样做后,渲染时间没有明显差异,总时间为0.5秒。但是 - 完成的绘图现在需要4秒才能显示在我的窗口中。相比之下,抗锯齿版本的不到0.5秒。唯一的区别是这一行代码:
RenderOptions.SetEdgeMode(myCanvas, EdgeMode.Aliased);
如果我调整窗口大小同样的事情发生,与抗锯齿版本相比,别名版本需要更长时间才能调整大小。显然,在这种情况下,我的绘图代码甚至没有被调用,所以问题必须在其他地方。
在使用别名渲染模式时,我的代码外部的某些内容似乎会大幅减慢速度,与我预期的情况完全相反。那我在这里错过了什么?