web-dev-qa-db-fra.com

Qu'est-ce que [Cycle détecté] avec fuite de mémoire?

Édition communautaire Visual Studio 2017

J'essaie de comprendre/utiliser l'utilisation de la mémoire du Performance Profiler dans ce que je ressens comme une fuite de mémoire dans mon application (MVVM avec des contrôles personnalisés). Trois instantanés ont été pris:

  1. Avant d'ouvrir mon contrôle utilisateur suspect, NewProgressNoteView.xaml.
  2. Au moment de l'exécution du contrôle utilisateur, et
  3. Après avoir quitté le NewProgressNoteView.xaml.

J'ai ensuite comparé l'instantané n ° 3 à l'instantané n ° 1. Dans le tableau résultant, j'ai imposé un filtre de "NewProgressNoteView". Ce qui suit est le résultat de l'expansion de l'instance de Doctor_Desk.Views.NewProgressNoteView supérieure. Il convient de noter "[Cycle détecté]" qui semble suspect, mais je ne sais pas ce que cela signifie exactement ou comment utiliser ces informations pour corriger la ou les fuites de mémoire? Que dois-je faire ensuite?

Toute aide sera très appréciée.

TIA.

enter image description here

12
Alan Wayne

Qu'est-ce que [Cycle détecté] lors de l'affichage de la mémoire gérée?

Lorsque vous affichez Instantanés du tas dans les outils de diagnostic de Visual Studios, vous avez:

La fenêtre de type d'objet qui montre les objets conservés en mémoire.

Lorsque vous sélectionnez un type d'objet particulier, vous pouvez accéder à:

  • Chemins vers la racine - Ne vous laissez pas berner par le fait que ces informations sont présentées dans une arborescence qui désigne généralement les enfants. Les chemins d'accès à la racine affichent en fait les objets parents qui font référence à l'objet que vous avez sélectionné.
  • Types référencés - Affiche les types enfants référencés par l'objet sélectionné.

Ces deux onglets sont des vues de référence qui vous aident à tracer les références parent et enfant d'un objet présentées via un menu arborescent.

Cycle détecté signifie simplement que l'analyseur de mémoire a trouvé la référence parent ou enfant directement ou indirectement en référence à l'objet sélectionné. Ainsi, plutôt que d'afficher une trace d'arborescence circulaire, il ajoute une balise détectée de cycle.

Ce n'est pas nécessairement une mauvaise chose ou votre problème racine.

Pour plus d'informations sur l'analyse de la mémoire et une explication détaillée des vues de référence, consultez cet article msdn: https://msdn.Microsoft.com/en-us/library/dn342825.aspx#Analyze%20memory%20use =

21
todef96