2015-01-08 16 views
6

完全に開発されたアプリケーションでは、メモリリークに本当に苦労しています。 C#とMVVM Light 5を使用しています。 メモリプロファイラの使い方、一般的なメモリリークの問題などについて学習しています。この問題には25時間以上をかけました。私はすべてのイベントハンドラを慎重にクリアし、BackNavigationの後、各ページのDataContextとLayoutRootをヌルにするだけでなく、循環ナビゲーションが検出されたときも(私はApp.cs内のページの最後に実行中のインスタンスを保存しますインスタンスがすでに作成されているかどうかを確認し、存在する場合はクリアします)。WP8大量のメモリリーク

私は努力を尽くしています。ここからどこに行くのかわかりません。

以下は、2ページ間を繰り返しナビゲートした後のメモリ解析のスクリーンショットへのリンクです。 何らかの理由で各ページのインスタンスが解放されていませんが、単なるバイトに縮小されています。

enter image description here

私の保持配分の違い、あなたが見ることができるように、スタートからビジュアルを保持し、最後は(全部で30メガバイト程度)非常に軽微です。

しかし、グラフには、ほぼ100MBの差があります。

これは私を絶対に夢中にしている、私は基本的なプラットフォームがこれを管理する上でより良い仕事をするだろうと思った。どんな助けでも大歓迎です。

+0

WebBrowserインスタンスを使用していますか?私はそれが私に修正できないようなメモリリークを与えていたので、私のアプリから完全に削除しなければならなかった。 – McGarnagle

+0

画像もあります。 –

+0

返信をお寄せいただきありがとうございます。 WebBrowserコントロールをまったく使用していません。 私はいくつかの写真がありますが、わずか5ナビゲーションサイクルで100MBを飛び越えるにはちょっとです。最大の写真(パノラマ背景)は400kbです。残りは10kb未満です。 –

答えて

0

I慎重に明確なすべてのイベントハンドラ、および各ページのDataContextのとLayoutRootても、ヌル私は、システムが実行されたVMを再利用するための場所に置かれることをお勧めします

BackNavigation

後と本当に必要な場合にのみ新しいデータを取得します。私はプロのマッピングアプリケーションで作業していました。現在、WPストアでは、必要に応じてアイテムを作成し、VMを2度作成しませんでした。

+0

正しいですが、MVVM Lightに付属のSimple IOCを使用してViewModelインスタンスを処理しています。私のViewModelは決して2回作成されることはありません。だから私の問題の原因にはなりません。しかし、ありがとう! –