gpt4 book ai didi

c# - XNA 性能下降 GameState Management

转载 作者:行者123 更新时间:2023-11-30 22:30:40 25 4
gpt4 key购买 nike

我有一个关于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com