您是否经历过从Visual Studio执行C++ opengl应用程序运行得更快,更顺畅的情况?当正常执行时,没有调试器,我得到较低的帧速率,50而不是80,以及一个奇怪的滞后,其中fps每20-30帧跳跃到大约25帧/秒.有没有办法来解决这个问题?
编辑:我们也使用了很多显示列表(使用glNewList创建).增加显示列表的数量似乎增加了滞后.
编辑:问题似乎是由页面错误引起的.使用SetProcessWorkingSetSizeEx()调整流程工作集没有帮助.
编辑:对于一些大型模型,使用procexp-utility的GPU内存使用情况很容易发现问题.当每帧有许多glCallList调用时,内存使用非常不稳定.没有添加新几何体,没有加载纹理,但是gpu-memory-allocation波动+ -20 MB.过了一会儿它变得更糟,并且可以一次分配150Mb之类的东西.
这可能是线程或进程的优先级。Visual Studio 可能会以稍高的优先级启动您的进程,以确保调试器能够响应。尝试在应用程序代码中使用SetPriorityClass() :
SetPriorityClass(GetCurrentProcess(), ABOVE_NORMAL_PRIORITY_CLASS);
Run Code Online (Sandbox Code Playgroud)
“高于正常”类别只是将其推到“正常”类别的其他所有类别之前。正如文档所说,不要设置超高优先级,否则你可能会搞砸系统的调度程序。
在以 60 fps 运行的应用程序中,您仅需要 16 毫秒来绘制一帧(在 80 fps 下则更少!) - 如果需要更长的时间,您会丢弃帧,这可能会导致帧速率小幅下降。如果您的应用程序与其他应用程序具有相同的优先级,则另一个应用程序很可能会暂时窃取某些任务的 CPU,并且您会丢失几帧或至少错过当前帧的 16 毫秒窗口。这个想法是稍微提高优先级意味着 Windows 更频繁地返回您的应用程序,因此它不会丢失那么多帧。
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |