1

Windows Phone 7 用の Silverlight で 1 つのアプリケーションを開発しています。これは、最初のページから 2 番目のページへ、2 番目のページから最初のページへ、というように複数回移動するときに発生するメモリ リークの問題です。

それを解決するために、2 つの空白ページを持つ新しいプロジェクトを 1 つ作成します。各ページには、現在のメモリとピーク メモリを印刷するための 2 つのテキスト ブロックと、次または前のページに移動するための 1 つのボタンがあります。ページ 1 からページ 2 に移動するとき、3 つすべてを null 参照し、gc.collect を呼び出してページ参照を破棄します。同じように、ページ 2 からページ 1 に移動しながら、同じことを行います。

また、タイマーで 500 ミリ秒ごとに gc.collect() を呼び出そうとしましたが、まだ結果はありません。gc.collect() を完全に削除すると、メモリが MB 単位で増加するので、必須だと思います。

4

1 に答える 1

3

あなたはそれを間違っています。ページ 1 からページ 2 に移動し、次にページ 1 に移動し続けている場合、以前のすべてのページ インスタンスがナビゲーション スタックに保持されます。あなたが指摘したメモリ管理の問題には悪いですが、ユーザーがアプリを終了する前に戻るボタンを何度も押さなければならないため、UXもひどいものです(実際、それが過ぎ去るかどうかさえわかりません)マーケットプレイス認定を通じて)。

ページ 2 に移動した後、ページ 1 に移動する場合NavigationService.GoBackは、NavigationService.Navigate. 以前にキャッシュされたページ 1 のインスタンスが復元されます (そのため、そのページの参照を無効にしてはいけません)。

まれに、ページ 1 の以前のインスタンスではなく、新しいインスタンスに移動したい場合があります。その場合はNavigationService.RemoveBackEntry、最新のキャッシュ ページをナビゲーション スタックから削除するために呼び出します (スタック全体をクリアするには、複数回呼び出すことができます)。

于 2013-05-07T06:06:30.830 に答える