3

WP7 アプリケーションで Start キーを押してからすぐに Back キーを押してアプリに戻り、これらの手順をすばやく何度も繰り返すと、アプリケーションがクラッシュすることに気付きました (予期せず終了し、Back キーを使用して回復する方法はありません) )。これはデバイスで発生し (エミュレーターでは見られません)、アプリケーションがシャットダウンされるまでに 10 ~ 15 の手順が必要です。状態の保存/復元に関する Microsoft のガイドラインに従います。さらに、そのような方法で試した他のすべてのアプリもクラッシュします。ただし、一部のアプリは、他のアプリよりもこの方法で強制終了するのがはるかに困難です。このストレス テストの実験中に、私は次のことに気付きました。

  • XNA ゲームは、純粋な Silverlight アプリよりも耐性が低い傾向があります
  • アプリケーションが保存/回復するデータが多いほど、耐性が低くなります
残念ながら、私の XNA ゲームは非アクティブ化中に大量のデータを保存する必要があり、非常に簡単にクラッシュしてしまいます。

それが既知の問題なのか、それとも何か他の問題なのか、誰にもわかりますか? 問題を完全に解消できない場合、ゲームをより安定させる方法についてアドバイスをいただければ幸いです。

4

2 に答える 2

1

アプリケーションをもう少し安定させる方法を見つけました。実際には、非アクティブ化のたびにゲーム データを分離ストレージに保存したくありません。ゲームの状態が変更された場合にのみ必要です。ゲームはアクティブ化後に自動的に一時停止されるため、状態は変化せず、ユーザーがゲームを再開するまでデータを再度保存する必要はありません。したがって、分離ストレージへのデータの格納は、最初の非アクティブ化の場合にのみ行われます。このアプローチは少しは役に立ちましたが、それほどではありませんでした。スタートキー/バックキーを20回繰り返してもダウンします。

于 2012-04-04T06:01:46.713 に答える
1

問題が De/-Serialization プロセス内にある可能性があるという考えでは、これを行うことができます。

    private IsolatedStorageSettings isosettings = IsolatedStorageSettings.ApplicationSettings;
    void Application_deactivated()
    {
        isosettings.Add("serialization_finished", false);//just add once, 
                    //after that use isosettings["serialization_finished"]
        //DO: save here your code into isostorage
        isosettings["serialization_finished"] = true;
    }
    void Application_activated()
    {
        while (!isosettings["serialization_finished"])
            Thread.Sleep(500);
        //DO: read you data from isostorage
    }

したがって、シリアル化プロセスが終了したかどうかをテストするために、実際にオン/オフ スイッチを作成します。

年:

トゥームストーンには、終了しなければならない制限時間 (10 秒) があります。私の推測では、あなたが彼をトゥームストーンに与えすぎたため、アプリケーションの 1 つのインスタンスが時間内にトゥームストーン化を完了できなかったのです。しかし、これは、節約するほどクラッシュするのが早いという前提に基づく仮定にすぎません。

廃棄に必要な時間を測定し、分離ストレージにデータを書き込むことで、それをテストできます。データを分析し、トゥームストーン処理の時間が増加していること (最大 8 ~ 9 秒) を確認すると、それが適切な時間であると結論付けることができます。

一方、必要な時間が増加せず、数秒以内にとどまる場合は、時間の問題ではないと安全に結論付けることができます。

于 2012-04-03T12:42:37.247 に答える