使用Instruments进行性能分析时,OpenGL ES 应用程序的运行速度似乎更快。

4
我很害怕提出这个问题,因为它没有具体的细节和代码示例,但这是因为我在过去几周中遇到了三个完全不同的应用程序中,我认为具体的代码可能会使问题变得复杂。
我搜索了网络,没有找到任何关于我遇到的现象的参考资料,所以我将直接描述它,并希望其他人也遇到了相同的问题:
“问题”是:所有我构建的iOS OpenGL应用程序都比独立运行时在Instruments中进行分析时运行要快得多。例如,帧速率大约快两倍(从30fps跳到60fps)。这既是通过代码计时循环测量的,也是从观看应用程序运行中获得的数据。Instruments似乎做了一些神奇的事情。
这是在设备上,而不是在iOS模拟器上。如果我通过Instruments对我的OpenGL应用程序进行分析并上传到设备(具体来说是运行iOS 5.1的iPad 3),则帧速率比独立运行时要快得多。似乎没有帧跳过或类似的问题。它只是以大约两倍的速度进行相同的计算。
尽管我没有包含任何代码示例,但请假设我正在执行正常操作。使用VBOs和VAOs的OpenGL ES 2.0。使用分发队列/块对某些计算密集型代码区域进行多线程处理。没有什么奇特或疯狂的东西。
我想知道是否有人经历过类似的事情。如果没有,我将回到我的洞穴,并继续用叉子刺自己的腿。

你确定它正在运行相同的构建版本吗?默认情况下,“run”使用调试构建(通常为-O0),而“profile”使用发布构建(通常为-Os)。 - tc.
1个回答

7

可能是因为当您进行性能分析时,默认使用的是发布版本而不是调试版本。如果您只是点击运行按钮,则会使用调试版本。


你说得完全正确,furnoboy。我甚至没有考虑到Instruments会使用发布版本;如果有什么区别的话,我认为它会因为所有数据监控而变慢。谢谢。 - davidf2281
我在Xcode 10.1的macOS Swift应用程序中遇到了类似的问题,加载大约46,000个足球运动员的数据(使用调度队列和操作队列进行了大量的多线程处理,并进行了许多异步网络获取)。当进行时间分析时,代码运行速度非常快,或者使用档案构建也是如此。经过一些分析,我发现Xcode在从Xcode运行时限制我的网络连接速度(这是在Wifi、Debug或Release上),它的速度限制约为14K/sec,但是在通过Instruments运行或以档案构建时,可以获得150K-180K/sec。因此,如果使用大量的网络代码,请注意此问题。 - Ben Stahl
关于我之前的评论说明:网络限速问题在Xcode 10.2 + macOS 10.14.X中已经得到解决。不确定是哪一个修复了它,但现在我从Xcode运行时可以获得全带宽。 - Ben Stahl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接