1

私はWindows 10用のUWPアプリケーションを開発しています。私のアプリでメモリ管理に問題があります。私はSplitViewを持っています。そのコンテンツの中にはたくさんの画像があります。ユーザーが画像をクリックすると、フルサイズの画像がペインに読み込まれます。私はXAMLの多くのClickイベントとTappedイベントに直接登録しています。私はメモリの使用量をチェックすると、それは増加し続け、ポイントの後、アプリがクラッシュします。私が持っている質問は、メモリを解放するためにXAMLに登録したすべてのイベントを登録解除する必要があるかどうかです。私はGC.Collect()を呼び出してみましたが、それは問題を解決しません。私はメモリリークがあるかもしれないと思います。アプリ内に複数のページがあり、SplitViewの外にあるボタンをユーザーが選択すると、SplitViewコンテンツに別のページを作成する前に、その特定のページに登録されているイベントの登録を解除するにはどうすればいいですか?WindowsのユニバーサルWindowsアプリケーションでメモリを扱う場合

編集:私はここにそれを貼り付けることはできませんので

XAMLページ全体のためには、300以上の行です。しかし、イベントはこのように登録されます

<Button Name="Sample" Tapped="Sample_Tapped" Content="Sample Button" /> 

このページは毎回作成されます。キャッシュされません。私はSplitViewの内容の中にFrameを持っています。これは、ユーザが表示される画像のセクションを変更するたびに変更されます。ユーザーがセクションを変更すると

MainFrame.Navigate(typeof(ImagePage),"SampleSection"); 

、私は

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) 
    { 
     GC.Collect(); 

    } 

ガベージコレクタを呼び出しています。しかし何のメモリが解放されません。

+0

詳細情報が必要です。どのようにイベントに登録しますか?ページは訪問されるたびに再作成されますか?ユーザーがページを再読み込みせずにページにとどまっていてもリークが発生しますか? – Stilgar

+0

私は詳細を追加しました。私はコード全体を貼り付けることができないことを理解する。その長すぎます。ガベージコレクションが機能していない理由はわかりません。 –

+0

メモリプロファイラという名前のツールがあることは知っていますか?それらの1つを使用してください。例えば。 Ants Memory Profilerは、最も使いやすいものの1つです。 PerfViewは、途中で最高の無料のプロファイラですが、高い学習曲線があります。 –

答えて

0

私は、この行が問題の原因だと思う:

MainFrame.Navigate(typeof(ImagePage),"SampleSection");

あなたが画像を選択し、新規ページの毎回ユーザーを作成していきます。それは残業を食うでしょう。

解決策は新しいデータ(新しいDataContext?)でページを更新し、新しいデータを作成しません。別の解決策は、BackStackプロパティを使用して新しいページが必要なときにMainFrameのナビゲーションスタックをクリアすることです。

XAMLのNavigationCacheModeを「必須」に設定すると、問題の根本原因ではありません。

+0

私はあなたが言っていることを得る。私が間違っている場合は私を訂正してください。しかし、毎回新しいページを作成するときは、古いページのメモリを正しくリサイクルする必要がありますか?それは起こっていない。 –

+0

それは明らかではありません、あなたが実際にいけない場合は、イベントに戻る必要があるためです。 – thang2410199

+0

バックスタックは無限ではありませんので、メモリ不足例外が発生してはなりません。おそらくページが重いかもしれないが、試してみる価値がある。 – Stilgar

関連する問題