与桌面相比,UWP 上的 FillGeometry 慢得多?
FillGeometry much slower on UWP compared to desktop?
我们应用程序的 UWP 版本运行帧速率比桌面版本慢得多(6 fps vs 24 fps)。请注意,两个版本都在 相同 硬件上进行了测试。
两个版本都是使用 SharpDX 构建的,唯一的区别是 RenderTargets 的设置方式。 Windows 应用程序使用 HwndRenderTarget
,而 UWP 应用程序使用 SurfaceImageSource
画笔绘制到 Rectangle
。
我们已将主要罪魁祸首(至少在 CPU 方面)缩小到 FillGeometry
,这在 UWP 上消耗了大量时间。
与桌面相比,上述 UWP 配置中 FillGeometry
花费更长的时间是否有原因?
注意:两者的呈现代码相同,因此请避免对两种实现产生同等影响的建议,例如使用 GeometryRealization
而不是 Geometry
。我们正在寻找 UWP 和桌面渲染性能差异的原因。
如果除了几何之外还有其他因素可能会影响性能,那么了解这些因素也会很有用,因为我们的分析工具可能并不完全精确。
其中一个因素似乎是内部 Direct2D 裁剪在这些情况下的工作方式不同。
我们的场景有数百个几何体,我们的初始代码没有裁剪到视口,而是依赖 Direct2D 进行裁剪。这就造成了原文中提到的帧率差异post.
添加显式裁剪后,UWP 版本的帧率增加到 16fps 左右(仍然低于桌面应用程序的帧率),而桌面版本的帧率影响不大。
所以在这一点上,假设在这两种情况下不同的裁剪例程在起作用。
这还没有完全解决,因为我们在帧速率方面仍然存在显着差异。但这是一个开始。
我们应用程序的 UWP 版本运行帧速率比桌面版本慢得多(6 fps vs 24 fps)。请注意,两个版本都在 相同 硬件上进行了测试。
两个版本都是使用 SharpDX 构建的,唯一的区别是 RenderTargets 的设置方式。 Windows 应用程序使用 HwndRenderTarget
,而 UWP 应用程序使用 SurfaceImageSource
画笔绘制到 Rectangle
。
我们已将主要罪魁祸首(至少在 CPU 方面)缩小到 FillGeometry
,这在 UWP 上消耗了大量时间。
与桌面相比,上述 UWP 配置中 FillGeometry
花费更长的时间是否有原因?
注意:两者的呈现代码相同,因此请避免对两种实现产生同等影响的建议,例如使用 GeometryRealization
而不是 Geometry
。我们正在寻找 UWP 和桌面渲染性能差异的原因。
如果除了几何之外还有其他因素可能会影响性能,那么了解这些因素也会很有用,因为我们的分析工具可能并不完全精确。
其中一个因素似乎是内部 Direct2D 裁剪在这些情况下的工作方式不同。
我们的场景有数百个几何体,我们的初始代码没有裁剪到视口,而是依赖 Direct2D 进行裁剪。这就造成了原文中提到的帧率差异post.
添加显式裁剪后,UWP 版本的帧率增加到 16fps 左右(仍然低于桌面应用程序的帧率),而桌面版本的帧率影响不大。
所以在这一点上,假设在这两种情况下不同的裁剪例程在起作用。
这还没有完全解决,因为我们在帧速率方面仍然存在显着差异。但这是一个开始。