c# – EndDraw()在Direct2D中占用80%的工作时间

我在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.

最佳答案 这是慢性能和时间花费之间的差异.

如果你的draw方法比其他部分做得更多,可能意味着这个方法很慢,但也可能意味着你的其他部分不需要很多cpu.

88.2%的人告诉你,你只花了更多时间来绘制这些东西而不是做其他东西.

使用计时器确定您的抽奖是否缓慢.

点赞