EndDraw()在Direct2D中占工作时间的80%

问题描述 投票:4回答:2

我在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个以上的图形。该图允许用户在左右位置上进行操作,还可以缩放到特定的缩放级别。

因此,只要用户尝试操作该图,我只需将平移和缩放矩阵设置为TransformedPathGeometry,而不是每次都创建一个新矩阵。

ID2D1TransformedGeometry *m_pTransformedGeometry;

pFactory->CreateTransformedGeometry(graphgeometry, combinedMatrix, &m_pTransformedGeometry);

最后,我使用DrawGeometry方法绘制了TransformedGeometry。

我使用VisualStudio2013中的性能分析工具检查了我的应用程序。我可以看到,在特定的窥视级别,调用m_d2deviceContext-> EndDraw()方法需要花费超过80%的运行时间。我附加了以下屏幕截图,以在此性能输出中获得更多的想法。

是否有办法<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9VYjBRay5wbmcifQ==” alt =“在此处输入图像描述”>“ >>

您能请任何人帮助我吗?

关于,大卫C

我在Direct2D应用程序中遇到一个关键的性能问题。我使用Direct2D使用PathGeometry绘制图形,以获得更好的性能并在Windows 8中实现清晰渲染。...

c# c++ windows-store-apps direct2d
2个回答
2
投票
这是性能降低和时间花费之间的差异。

如果您的draw方法比其他部分做更多的工作,可能意味着此方法很慢,但也可能意味着您的其他部分不需要太多的CPU。


0
投票
“我只是将平移和缩放矩阵设置为TransformedPathGeometry而不是为每个每次。“
© www.soinside.com 2019 - 2024. All rights reserved.