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 BackgroundScreen(), null);
ScreenManager.AddScreen(new HighScoreScreen(), null);
ハイスコア画面に
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 MainMenuScreen(), null);
私はインテルHD2000グラフィックを搭載したインテルi3-2100で4GBのRAMを搭載したWindows 7 Home Premium x64を実行しています。
XNAでメモリリークをチェックできるツールはありますか。このような問題を追跡するための良い方法はありますか?手動で各ゲーム画面のコンストラクタでガベージコレクションを呼び出すのが助けになるでしょうか?上記を明確にするために
EDIT
:実際には、XNAに関連するメモリリークを見つけるための最も効率的なツールは何ですか?
ScreenManagerクラスは、ゲームのスクリーンのスタックを追跡します.ExcelScreenを呼び出すと、ScreenManagerクラスはスタックからスクリーンを削除します。
ExitScreen()GameScreenの親クラスで:
public void ExitScreen()
{
if (TransitionOffTime == TimeSpan.Zero)
{
ScreenManager.RemoveScreen(this);
}
else
{
isExiting = true;
}
}
"XNAでメモリリークをチェックできるツールはありますか?" - メモリ使用量をプロファイルするツールがたくさんあります。例えば、より多くの情報が必要です。画面の新しいインスタンスを作成するか、単一インスタンスを使用しますか? NO SENSEを行う画面を切り替えるたびに、新しい画面を作成するのが見えます。 –
"XNAでメモリリークをチェックできるツールはありますか?" - MicrosoftからCLR Profiler 4を入手してください。 –