私は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();
}
ガベージコレクタを呼び出しています。しかし何のメモリが解放されません。
詳細情報が必要です。どのようにイベントに登録しますか?ページは訪問されるたびに再作成されますか?ユーザーがページを再読み込みせずにページにとどまっていてもリークが発生しますか? – Stilgar
私は詳細を追加しました。私はコード全体を貼り付けることができないことを理解する。その長すぎます。ガベージコレクションが機能していない理由はわかりません。 –
メモリプロファイラという名前のツールがあることは知っていますか?それらの1つを使用してください。例えば。 Ants Memory Profilerは、最も使いやすいものの1つです。 PerfViewは、途中で最高の無料のプロファイラですが、高い学習曲線があります。 –