- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于 XNA 性能下降的问题。我正在使用 GameStateManagement来自微软的例子来创建我的游戏。我目前有一个主菜单屏幕 (GameScreen)、一个初始屏幕 (Game Screen)、高分屏幕 (GameScreen)、游戏播放屏幕 (GameScreen) 和一个选项菜单 (MenuScreen)。我已经让我的游戏在预生产环境中运行了大约 48 小时。在主菜单屏幕、初始屏幕和高分屏幕之间每 5 秒切换一次并持续 36 小时左右后,游戏性能真的受到了打击,变得 react 迟钝,帧率下降到 3fps 左右。
无论如何,在 GameStateManagement 示例中是否可以追踪到这个问题。我没有对基类进行任何更改,我只是将子类添加到 ScreenManager。
当我切换到新屏幕时,我会这样做:
启动画面的主菜单:
foreach (GameScreen screen in ScreenManager.GetScreens())
screen.ExitScreen();
ScreenManager.AddScreen(new SplashBackgroundScreen(), null);
ScreenManager.AddScreen(new SplashScreen(), null);
启动画面到高分画面
foreach (GameScreen screen in ScreenManager.GetScreens())
screen.ExitScreen();
ScreenManager.AddScreen(new BackgroundScreen(), null);
ScreenManager.AddScreen(new HighScoreScreen(), null);
高分屏幕返回主菜单屏幕
foreach (GameScreen screen in ScreenManager.GetScreens())
screen.ExitScreen();
ScreenManager.AddScreen(new BackgroundScreen(), null);
ScreenManager.AddScreen(new MainMenuScreen(), null);
我在配备 Intel HD2000 显卡的 Intel i3-2100 上运行 Windows 7 Home Premium x64 和 4GB 内存。
是否有任何工具可用于检查 XNA 中的内存泄漏。有什么好的策略可以开始追踪这样的问题吗?在每个游戏屏幕的构造函数中手动调用垃圾回收会有帮助吗?
编辑
澄清以上内容:在实践中,查找与 XNA 相关的内存泄漏最有效的工具是什么?
ScreenManager 类跟踪游戏的一堆屏幕,当您调用 ExitScreen 时,它会将其从堆栈中移除。
GameScreen 父类中的 ExitScreen():
public void ExitScreen()
{
if (TransitionOffTime == TimeSpan.Zero)
{
ScreenManager.RemoveScreen(this);
}
else
{
isExiting = true;
}
}
最佳答案
我不编写 XNA,但看起来你导致了内存泄漏。
ScreenManager.GetScreens() 接缝返回一个可枚举的 GameScreen。 screen.ExitScreen() 是否从 ScreenManager 的底层 GameScreen 集合中删除了 GameScreen 引用?
在我看来你添加了新实例
ScreenManager.AddScreen(new ..., null);
但永远不要删除退出的/旧的/未使用的实例。
也许您可以在程序开始时将所有“GameScreen”实例添加到 ScreenManager 一次,然后在状态更改事件中仅隐藏/显示您想要的“GameScreen”。
关于c# - XNA 性能下降 GameState Management,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9588047/
你好,我的代码编译有问题 我关注 http://gamedevgeek.com/tutorials/managing-game-states-in-c/教程但它无法编译,我不知道为什么。 来自 vis
我正在使用 XNA 开发游戏,当我开始游戏时会弹出一个菜单。如果你按“空格”,游戏本身就会开始。我正在使用具有三种不同情况的游戏状态开关来执行此操作。虽然当我到达最后一个状态(游戏结束屏幕)并想通过按
我有一个关于 XNA 性能下降的问题。我正在使用 GameStateManagement来自微软的例子来创建我的游戏。我目前有一个主菜单屏幕 (GameScreen)、一个初始屏幕 (Game Scr
我正在学习状态单子(monad),但我有点困惑。 我有一个数据类型 data GameState = GameState (Map String Double) Double Bool derivin
我正在学习状态单子(monad),但我有点困惑。 我有一个数据类型 data GameState = GameState (Map String Double) Double Bool derivin
我在将 GameState 保存为 JSON 时遇到问题。 最初我将 GameState 保存为 JSON,如下所示: Json json = new JSON(); String save = js
我是一名优秀的程序员,十分优秀!