编程语言
首页 > 编程语言> > C#-基于OpenTK的游戏断断续续

C#-基于OpenTK的游戏断断续续

作者:互联网

我目前正在开发使用OpenTK进行渲染的游戏; C#、. Net 4.0,OpenGL 2.

以1280×1024的分辨率最大化运行(不是全屏显示,但占用了所有可用的屏幕空间),我发现平均约为400 FPS.在1680×1050分辨率上,我平均看到了315 FPS.尽管帧速率很高,但我还是遇到间歇性卡顿现象.

基本上,在大约3整秒的时间内,渲染将明显口吃,然后在大约0.5到1秒钟内完全平滑.这个循环永远重复.

根据口吃,我的FPS计数器上没有显示帧速率下降.我通过计算帧数直到达到所需的更新频率来计算帧率,然后使用每秒的滴答声数量,更新频率中的滴答声数量以及算了.使用这种方法,我每秒钟只能看到一次更新,但是我从未见过帧率下降到远低于我期望的水平.

如果将游戏窗口拖动到第二个显示器,则该问题会更加严重.

在发布版本中运行该应用程序无法解决问题.

我通过redgate使用ANTS对应用程序进行了性能分析.这指出了自此以来已解决的许多问题.

有什么建议吗?

解决方法:

这种口吃通常是由垃圾收集器引起的.

监视您的收集计数,并检查它们是否对应于停顿期间(使用0、1和2作为参数调用GC.CollectionCount()).如果确实是这个原因,那么您将需要分析并减少内存分配(在这里对象池可以显着帮助您,结构可以代替寿命很短的类).

根据经验,在常规游戏过程中,您不需要任何第1代或第2代收藏.

编辑:禁用软框架限制器(即调用Run()或Run(60)但不运行(60,60))并启用vsync.这可能有助于减少口吃.

此外,请确保两个监视器都同步到相同的速率.当从主显示器向副显示器拖动窗口时,即使是很小的差异也会导致结结(我已经看到,这种差异发生在小至60Hz与59.9Hz的差异中).

标签:opentk,profiler,profiling,opengl,c
来源: https://codeday.me/bug/20191208/2094754.html