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