我的 Direct2D 应用程序面临一个严重的性能问题。我利用 Direct2D 使用 PathGeometry 绘制图形,以获得更好的性能并在 Windows 8.1 中实现清晰的渲染。
在创建 DeviceResources 时,我使用 Factory 接口创建 PathGeometry。然后我设置图形点以在输出表面中绘制我的图形。最后呈现的 ImageSource 将用作 XAML 中我的 Image 元素的源。
我只是按照下面的示例链接来实现我的场景。
http://code.msdn.microsoft.com/windowsapps/XAML-SurfaceImageSource-58f7e4d5
上面的示例帮助我从 Direct2D 获取 ImageSource 输出并最终在 XAML/C# 应用程序中使用。
让我们来解决我的问题。我在我的 Windows Store 应用程序的单个页面中使用了超过 24 个图表。该图表允许用户在左右位置进行操作,还允许缩放到特定的缩放级别。
因此,每当用户尝试操作图形时,我只需将 Translation 和 Scaling 矩阵设置为 TransformedPathGeometry,而不是每次都创建新的。
ID2D1TransformedGeometry *m_pTransformedGeometry;
pFactory->CreateTransformedGeometry(graphgeometry, combinedMatrix, &m_pTransformedGeometry);
最后,我使用 DrawGeometry 方法绘制了 TransformedGeometry。
我使用 VisualStudio2013 中的性能分析工具检查了我的应用程序。我可以看到,在特定的 peek 级别,调用 m_d2deviceContext->EndDraw() 方法需要超过 80% 的运行时间。我附上了下面的屏幕截图,以获得更多关于这个性能输出的想法。
有什么方法可以显着提高这种性能?
你能请任何人帮助我吗?
问候,大卫 C