首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于OpenTK的游戏间歇性卡顿

基于OpenTK的游戏间歇性卡顿
EN

Stack Overflow用户
提问于 2010-12-24 06:03:52
回答 1查看 2.4K关注 0票数 3

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

在1280x1024分辨率下运行最大化(不是全屏,但占用了所有可用屏幕空间),我看到平均每秒400FPS。在1680x1050分辨率下,我看到的平均每秒帧数约为315。尽管有这么高的帧率,我还是遇到了间歇性的口吃。

基本上,大约整整3秒,渲染将明显卡顿,然后它是完美平滑的大约0.5到1秒。这个循环永远重复。

在我的FPS计数器上没有显示与卡顿一致的帧速率下降。我通过对帧进行计数直到达到所需的更新频率来计算帧率,然后使用每秒的节拍数、更新频率中的节拍数和所计数的帧数来计算帧率。使用这种方法,我每隔一秒钟才能看到一次更新,但我从未见过帧速率远远低于我预期的水平。

如果我将游戏窗口拖到我的第二个显示器上,这个问题就会严重恶化。

在发布版本中运行应用程序未解决此问题。

我使用redgate的ANTS对应用程序进行了性能分析。这指出了我后来修复的一些问题。

这里有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2010-12-25 07:25:22

这种卡顿通常是由垃圾收集器引起的。

监控您的收藏次数,检查是否与卡顿周期对应(以0、1、2为参数调用GC.CollectionCount() )。如果这确实是原因,您将需要分析并减少内存分配(对象池在这方面可以提供很大的帮助,结构可以代替短暂的类)。

根据经验,在正常的游戏过程中,您不需要任何gen-1或gen-2集合。

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

此外,请确保两个监视器同步到相同的速率。将窗口从主监视器拖动到辅助监视器时,即使是细微的差异也会导致卡顿(我已经看到这种情况在小到60 vs对59.9 vs的差异中发生)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4522782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档