c++ - 为什么 SDL_PollEvent 这么慢?
问题描述
我一直在将仿真器编程为一个副项目,现在我正在处理效率问题。我已经设法摆脱了我正在做的所有缓慢的事情,比如很多 SDL_RenderDrawPoint,但现在我被卡住了。
我设法将其缩小到 SDL_PollEvent。我简化了我的主循环和事件循环,使它们看起来类似于一个简单的 SDL 教程。当我注释掉事件循环时,模拟器运行得非常快。我还使用了 Visual Studio 性能分析器来检查,果然,SDL_PollEvent 占用了大约 94% 的 cpu 时间。
我的模拟器做所有事情的地方ppuNptr->cycle()
只占 1.48% 。
不幸的是,我无法在另一个项目中复制它,所以我很茫然。
在轮询事件之前我应该做些什么吗?
我还能怎么调试这个?
目前我在带有 Visual Studio 2019 和 sdl 2.0.10 的 Windows 10 上。
解决方案
在分析我的模拟器时,我也遇到了这个问题。我的答案是将 SDL2 的版本降级到 2.0.8。
我运行的是 SDL2 版本 2.0.12,我在评论中采纳了 keltar 的建议,然后降级到 2.0.8,我不再遇到 SDL_PollEvent 导致性能下降的问题。这解决了我的问题,因为我的模拟器不再有低 FPS 问题。
我将查看是否已在错误票务系统中报告此问题,如果没有报告给 SDL2,因为此问题从版本 2.0.9 开始出现。
推荐阅读
- video-streaming - Bananapi M3:GStreamer 无法分配缓冲区大小
- sdk - 在 cognos 平台 java sdk 中有没有办法直接从管理员登录查询用户特定报告?
- amazon-redshift - 架构和表的 AWS Redshift 列表以及组名
- python - 读取包含存储为 numpy 数组的图像的 hdf5 文件的最有效方法是什么?
- java - 无法在 Android Studio 中获取对 Firebase 中自动生成的密钥的引用
- swift - 显式添加对闭包捕获的引用
- .net - EF Core 跟踪的实体未保存
- swift - CurrentValueSubject 的订阅者如何捕获错误
- java - CGLIB代理自定义序列化
- python - Django 模型类对象不可迭代