首页 > 解决方案 > 为什么 SDL_PollEvent 这么慢?

问题描述

我一直在将仿真器编程为一个副项目,现在我正在处理效率问题。我已经设法摆脱了我正在做的所有缓慢的事情,比如很多 SDL_RenderDrawPoint,但现在我被卡住了。

我设法将其缩小到 SDL_PollEvent。我简化了我的主循环和事件循环,使它们看起来类似于一个简单的 SDL 教程。当我注释掉事件循环时,模拟器运行得非常快。我还使用了 Visual Studio 性能分析器来检查,果然,SDL_PollEvent 占用了大约 94% 的 cpu 时间。

慢 SDL_PollEvent

我的模拟器做所有事情的地方ppuNptr->cycle()只占 1.48% 。

不幸的是,我无法在另一个项目中复制它,所以我很茫然。

在轮询事件之前我应该​​做些什么吗?

我还能怎么调试这个?

目前我在带有 Visual Studio 2019 和 sdl 2.0.10 的 Windows 10 上。

标签: c++sdl-2

解决方案


在分析我的模拟器时,我也遇到了这个问题。我的答案是将 SDL2 的版本降级到 2.0.8。

我运行的是 SDL2 版本 2.0.12,我在评论中采纳了 keltar 的建议,然后降级到 2.0.8,我不再遇到 SDL_PollEvent 导致性能下降的问题。这解决了我的问题,因为我的模拟器不再有低 FPS 问题。

我将查看是否已在错误票务系统中报告此问题,如果没有报告给 SDL2,因为此问题从版本 2.0.9 开始出现。


推荐阅读