我在 Direct2D 应用程序中遇到了一个严重的性能问题。我使用 Direct2D 使用 PathGeometry 绘制图形以获得更好的性能并在 Windows 8.1 中实现干净的渲染。
在创建 DeviceResources 时,我使用 Factory 接口(interface)创建了 PathGeometry。然后我设置图形点以在输出表面绘制我的图形。最后呈现的 ImageSource 将用作 XAML 中我的 Image 元素的源。
我只是按照下面的示例链接来实现我的场景。
http://code.msdn.microsoft.com/windowsapps/XAML-SurfaceImageSource-58f7e4d5
上面的示例帮助我从 Direct2D 获取 ImageSource 输出,并最终在 XAML/C# 应用程序中使用。
让我们来解决我的问题。我在 Windows 应用商店应用程序的单个页面中使用了超过 24 个图表。该图允许用户在左右位置进行操作,还允许缩放到特定的缩放级别。
因此,每当用户尝试操作图形时,我只需将平移和缩放矩阵设置为 TransformedPathGeometry 而不是每次都创建新的矩阵。
ID2D1TransformedGeometry *m_pTransformedGeometry;
pFactory->CreateTransformedGeometry(graphgeometry, combinedMatrix, &m_pTransformedGeometry);
最后,我使用 DrawGeometry 方法绘制了 TransformedGeometry。
我使用 VisualStudio2013 中的性能分析工具检查了我的应用程序。我可以看到,在特定的 peek 级别,调用 m_d2deviceContext->EndDraw() 方法需要超过 80% 的运行时间。我附上了下面的屏幕截图,以获得更多关于这个性能输出的想法。
有没有办法 显着提高这种性能 ?
你能请任何人帮助我吗?
问候,
大卫·C
最佳答案
缓慢的性能和花费的时间之间是有区别的。
如果您的 draw 方法比其他部分做的工作更多,则可能意味着此方法很慢,但也可能意味着您的其他部分不需要很多 cpu。
88.2% 只告诉你你花在画那个东西上的时间比做其他东西多。
使用计时器来确定您的抽奖是否缓慢。
关于c# - EndDraw() 在 Direct2D 中占用 80% 的工作时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18576005/