我在Direct2D应用程序中面临一个严重的性能问题。我使用Direct2D使用PathGeometry绘制我的图形以获得更好的性能并在Windows 8.1中实现干净的渲染。
在创建DeviceResources时,我使用Factory接口创建PathGeometry。然后我设置Graph点以在输出表面绘制我的图形。最后渲染的ImageSource将用作XAML中我的Image元素的源。
我只是按照以下示例链接来实现我的方案。
http://code.msdn.microsoft.com/windowsapps/XAML-SurfaceImageSource-58f7e4d5
以上示例帮助我从Direct2D获取ImageSource输出并最终在XAML / C#应用程序中使用。
让我来解决我的问题。我在Windows Store应用程序的单个页面中使用了超过24个图表。此图表允许用户在左右位置进行操作,并允许缩放到特定的缩放级别。
因此,每当用户尝试操作图形时,我只需将Translation and Scaling矩阵设置为TransformedPathGeometry,而不是每次都创建新的矩阵。
ID2D1TransformedGeometry *m_pTransformedGeometry;
pFactory->CreateTransformedGeometry(graphgeometry, combinedMatrix, &m_pTransformedGeometry);
最后,我使用DrawGeometry方法绘制TransformedGeometry。
我使用VisualStudio2013中的性能分析工具检查了我的应用程序。我可以看到,在特定的peek级别,调用m_d2deviceContext-> EndDraw()方法需要80%以上的运行时间。我附上了下面的屏幕截图,以便更好地了解这个性能输出。
有没有办法显着提高此效果?
你能帮助我吗?
此致 大卫C
答案 0 :(得分:2)
这是慢性能和时间花费之间的差异。
如果你的draw方法比其他部分做得更多,可能意味着这个方法很慢,但也可能意味着你的其他部分不需要很多cpu。
88.2%的人告诉你,你只花了更多的时间来绘制这些东西,而不是做其他事情。
使用计时器确定您的抽奖是否缓慢。
答案 1 :(得分:0)
“我只是将转换和缩放矩阵设置为 TransformedPathGeometry而不是为每个 每次。”
我希望您使用世界变换?否则,您将覆盖指针而不先释放指针,从而导致内存泄漏。您不能直接更改几何矩阵,必须每次都重新创建它,或者,如果可以,则将变换应用于整个世界。