web-dev-qa-db-ja.com

メモリリークのある[サイクル検出]とは何ですか?

Visual Studio 2017コミュニティエディション

私はアプリケーション(カスタムコントロールを備えたMVVM)のメモリリークと思われるもので、パフォーマンスプロファイラのメモリ使用量を理解/使用しようとしています。 3つのスナップショットが作成されました。

  1. 疑わしいユーザーコントロール、NewProgressNoteView.xamlを開く前に。
  2. ユーザーコントロールの実行時、および
  3. NewProgressNoteView.xamlを終了した後。

次に、スナップショット#3とスナップショット#1を比較しました。結果のテーブルでは、「NewProgressNoteView」のフィルターを適用しました。以下は、トップDoctor_Desk.Views.NewProgressNoteViewのインスタンスを展開した結果です。注目すべきは「[Cycle Detected]」で、疑わしいと感じますが、正確に何を意味するのか、またはこの情報を使用してメモリリークを修正する方法がわかりませんか?次に何をしますか?

どんな助けでも大歓迎です。

TIA。

enter image description here

12
Alan Wayne

マネージメモリを表示する場合の[サイクルの検出]とは何ですか?

Visual Studioの診断ツール内でヒープスナップショットを表示する場合:

メモリに保持されているオブジェクトを表示するオブジェクトタイプウィンドウ

特定のオブジェクトタイプを選択すると、以下にアクセスできます。

  • ルートへのパス-この情報は、通常は子を示すツリービューで表示されるという事実にだまされないでください。ルートへのパスには、選択したオブジェクトを参照する親オブジェクトが実際に表示されます。
  • 参照されたタイプ-選択されたオブジェクトによって参照された子タイプを表示します。

これらのタブは両方とも参照ビューであり、展開ツリーメニューを介して表示されるオブジェクトの親および子参照をトレースするのに役立ちます。

Cycle Detectedは、メモリアナライザーが、選択したオブジェクトに直接または間接的に参照する親または子参照を検出したことを意味します。そのため、循環ツリービュートレースを表示するのではなく、サイクル検出タグを追加します。

これは必ずしも悪いことでも、根本的な問題でもありません。

メモリの分析とリファレンスビューの詳細な説明については、msdnの記事をご覧ください。 https://msdn.Microsoft.com/en-us/library/dn342825.aspx#Analyze%20memory%20use =

21
todef96