我有一個關於降低XNA性能的問題。我使用Microsoft的GameStateManagement示例來創建我的遊戲。我目前有一個主菜單屏幕(GameScreen),一個閃屏(Game Screen),高分屏幕(GameScreen),遊戲屏幕(GameScreen)和一個選項菜單(MenuScreen)。我的遊戲在預生產環境中運行了大約48小時。在主菜單屏幕,閃屏和高分屏幕之間每隔5秒鐘切換36小時後,遊戲性能確實會受到影響並變得無法響應,並且幀率下降到3fps左右。XNA性能降級GameStateManagement
反正有沒有在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);
我在具有英特爾HD2000顯卡的英特爾i3-2100上運行帶有4GB內存的Windows 7家庭高級版x64。
是否有可供您在XNA內存泄漏任何工具。有沒有什麼好的策略來開始追蹤這樣的問題?會在每個遊戲畫面的構造函數中手動調用垃圾回收幫助?
編輯
爲了澄清以上:在實踐中,什麼是最有效的工具,以找到與XNA內存泄漏?
屏幕管理類跟蹤的遊戲畫面中的堆疊的,當你調用ExitScreen它從棧中刪除。
ExitScreen()在GameScreen父類:
public void ExitScreen()
{
if (TransitionOffTime == TimeSpan.Zero)
{
ScreenManager.RemoveScreen(this);
}
else
{
isExiting = true;
}
}
「是否有任何工具可用於檢查XNA中的內存泄漏?」 - 有大量的工具來分析內存使用情況。我們需要更多信息。你是否創建了一個屏幕的新實例或者是否使用了單個實例?根據我看到您每次切換屏幕時都會看到您創建新屏幕,這使得NO SENSE無效。 – 2012-03-06 17:06:27
「是否有可供您在XNA內存泄漏任何工具。」 - 從Microsoft獲取CLR Profiler 4。 – 2012-03-07 03:53:46