Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EndDraw()占用Direct2D中80%的工作时间_C#_C++_Windows Store Apps_Direct2d - Fatal编程技术网

C# EndDraw()占用Direct2D中80%的工作时间

C# EndDraw()占用Direct2D中80%的工作时间,c#,c++,windows-store-apps,direct2d,C#,C++,Windows Store Apps,Direct2d,我在Direct2D应用程序中面临一个关键的性能问题。我使用Direct2D使用PathGeometry绘制图形,以获得更好的性能,并在Windows 8.1中实现干净的渲染 在创建DeviceResources时,我使用Factory界面创建PathGeometry。然后设置图形点,在输出曲面中绘制图形。最终渲染的ImageSource将用作XAML中my Image元素的源 我只是按照下面的示例链接来实现我的场景 上面的示例帮助我从Direct2D获得ImageSource输出,并最终用于

我在Direct2D应用程序中面临一个关键的性能问题。我使用Direct2D使用PathGeometry绘制图形,以获得更好的性能,并在Windows 8.1中实现干净的渲染

在创建DeviceResources时,我使用Factory界面创建PathGeometry。然后设置图形点,在输出曲面中绘制图形。最终渲染的ImageSource将用作XAML中my Image元素的源

我只是按照下面的示例链接来实现我的场景

上面的示例帮助我从Direct2D获得ImageSource输出,并最终用于整个XAML/C应用程序

让我们谈谈我的问题。我在Windows应用商店应用程序的单个页面中使用了24个以上的图形。此图允许用户在左右位置进行操作,还允许缩放到特定的缩放级别

因此,每当用户试图操纵图形时,我只是将平移和缩放矩阵设置为TransformedPathGeometry,而不是每次都创建一个新矩阵

ID2D1TransformedGeometry *m_pTransformedGeometry;

pFactory->CreateTransformedGeometry(graphgeometry, combinedMatrix, &m_pTransformedGeometry);
最后,我使用DrawGeometry方法绘制了TransformedGeometry

我使用VisualStudio2013中的性能分析工具检查了我的应用程序。我可以看到,在特定的peek级别中,调用m_d2deviceContext->EndDraw()方法需要80%以上的运行时间。我附上了下面的屏幕截图,以了解更多关于此性能输出的信息

有什么方法可以大大提高这一性能吗

你能在这方面请任何人帮我吗

问候,,
David C

缓慢的表现和花费的时间是有区别的

如果您的绘图方法比其他部分做更多的工作,这可能意味着此方法很慢,但也可能意味着您的其他部分不需要很多cpu

88.2%的人只告诉你,你花在画画上的时间比做其他事情要多

使用计时器确定绘图是否缓慢

“我只是将平移和缩放矩阵设置为 TransformedPathGeometry,而不是为每个和创建新的PathGeometry 每一次。”


我希望你用世界变换?否则,您将覆盖指针而不释放它,从而导致内存泄漏。不能直接更改几何体的矩阵,每次都必须重新创建它,或者如果可以,可以将变换应用于整个世界。

我只是从框架中调用EndDraw方法。但与其他方法相比,它所占的百分比更高。降低这个百分比以提高性能的原因是什么。@DavidBekham将其与其他方法进行比较仍然不是一种有效的方法。在EndDraw中,每次绘图或最难的东西都会出现,这种方法使用88.2%是很好的。实际上,在性能方面,我的意思是,当我在ARM设备中测试我的应用程序时,我的性能太慢了。如何提高我的应用程序性能?@DavidBekham你有截图吗?你能减少你画的元素数吗?@DavidBekham你应该上传到这里,让我们大家更好地确定你的问题。这是正常的。在EndDraw()调用中,DirectX将实际完成渲染到屏幕的工作。这里的问题不是绘图速度慢,而是代码的其余部分根本不需要花很多时间。所以这个百分比很大。@HansPassant:我想这就是我的性能泄漏问题所在。那么我们不能从外部降低%吗。如果是的话,我们需要考虑的因素是什么?写更多的代码,数字会自动变小。您根本没有表现出性能问题。您只提供了一个数字,并没有表明该应用程序实际上存在响应问题。既然您无法更改DirectX并使其更快,那么您就完成了。它已经达到了前所未有的速度。只有简化你画的东西才能使它更快。