7

我正在通过 OpenGL 渲染对象,并且在大多数情况下都获得了 60fps 的平滑帧速率。直到我在后台线程中做一些繁重的事情,比如从 REST API 中获取东西,处理它,然后将对象添加到图中(低优先级的东西,我更关心 UI 流动性)。然后渲染器将暂停很长一段时间,最多 1 秒(大约只要后台线程运行),然后像什么都没发生一样恢复。我注意到这一点是因为动画同时开始,并且在此期间卡住了。后台线程设置为最低优先级,垃圾收集确实需要 100-200 毫秒,但不是整个秒。当我在后台任务中的任何位置设置调试点时,渲染继续正常,没有任何延迟。

我繁重的后台线程是否有可能使 OpenGL 线程饿死?如果是这样,我该怎么办?

4

1 回答 1

1

当然!需要为 GPU 提供数据,而这是由 CPU 完成的。因此,如果系统出现瓶颈,例如 I/O 或 CPU 处理,那么 GPU 将无法获得支持。例如,动画传统上是在 CPU 上完成的。这就是为什么您可以在 PC 上使用相同的图形芯片但使用不同的 CPU 获得更高帧速率的许多游戏。

我也同意分​​析是一个非常好的主意。如果可以的话,我建议进行分析以确保它实际上是 REST 调用,或者 REST 调用是否是许多事情之一

我注意到关于 REST 处理的一件事,这发生在我身上。由于 REST 有时会处理大量字符串,并且如果您不使用 StringBuilder,最终可能会触发大量垃圾收集。但是,听起来您并没有得到这个。

于 2012-10-23T20:15:54.803 回答