我一直致力于将基于 XNA/WinForms 的现有 tilemap 编辑器迁移到 WPF。我对 WPF 比较陌生,但大多数概念并不难掌握。我有一个嵌入到 ScrollViewer 中的 Viewbox,使用 (Viewbox) 派生的 OnRender 方法提供的 DrawingContext 中的 DrawImage 方法来绘制地图。问题是当屏幕上有相当多的图块(在我的机器上>1000)时,我无法获得与 XNA/WinForm 版本几乎相同的性能。我已经实现了缩放和平移,但是当我缩小太多或在屏幕上有大量图块时平移时,会出现严重的延迟,从而破坏用户体验。我已经采取了几个明显的优化措施(冻结源位图,剔除看不到的图块,将位图缩放模式设置为 LowQuality,提供缓存缓存提示),但它们似乎无法解决问题。问题显然在于 WPF 处理使用 DrawingContext 绘制带纹理的四边形的方式。
我提供了一个示例应用程序,其中包含重现问题所需的所有代码:SampleGridDrawingExample
按住鼠标中键并移动鼠标进行平移。随着窗口大小的增加,它变得越来越明显(显然是因为正在渲染更多的图块)。
有没有比 WPF 中的 DrawingContext 更快的方法来绘制大量具有合理性能的纹理四边形?使用 XNA/WinForms 我可以在多个图层中以合理的延迟绘制约 50000 个图块,而在 WPF 中使用我当前的方法超过 1000 会导致明显的延迟(>10000 会使应用程序爬行)。