如何在XNA游戏中减少CPU使用率,即使没有值得计算的内容?

4
一个新的XNA游戏项目应用程序在其窗口处于活动状态时会消耗相当多的CPU百分比。在我的桌面PC上,它大约占用2核处理器的一个核心的30%。当窗口失去焦点时,游戏进入空闲模式并消耗约1%的CPU。
最近我使用XNA制作了一个图像查看器应用程序,在没有进行任何图像操作时重新绘制帧并没有太多意义,因此我使用了SuppressDraw()方法,该方法如其名称所示,抑制了为绘制下一帧而花费资源,而是显示上次绘制的帧。但仍然存在一个问题,即应用程序会因非常简单的输入更新而浪费CPU。
当XNA应用程序不需要太多CPU时,如何减少CPU使用率?

对你的应用程序进行性能分析,以查看它在处理时间上花费了多少时间。然后更改执行流程,避免不必要的处理。 - axon
@axon 就像我说的那样,输入更新非常简单。当应用程序的窗口不在焦点时,它并不消耗太多资源,但是当它在焦点时,却因为无所作为而消耗过高。 - user1306322
你可以在主循环中简单地添加 Sleep(100)。如果没有好处,每秒渲染数百帧就没有意义了。或者,设定一个目标帧率,并调整睡眠时间以达到该目标。 - axon
@axon 我真的不认为这是PC XNA应用程序的选项。 - user1306322
是的。您真的应该尝试一下。“如果您确实需要在某些情况下等待特定的时间,那么sleep就是合适的选择。” 来自:https://dev59.com/4HNA5IYBdhLWcg3wF5qO 当然,如果您正在使用已经实现了此功能的框架,则可以使用它。 - axon
1个回答

4

引自问题的内容:

根据XBox Live Indie Games论坛上的讨论,显然在某些处理器(和操作系统)上,当使用Game.IsFixedTimeStep的默认值时,XNA会占用一个核心的100% CPU时间。

常见的解决方法(对我也有效)是将以下内容放置在Game构造函数中:IsFixedTimeStep = false;

更多详情请查看此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接