2017-07-07 11 views
1

Comment l'utilisation de la mémoire non gérée peut-elle être visualisée et surveillée dans Visual Studio dans un projet C#? Est-il possible de vérifier si la mémoire allouée a été correctement supprimée plus tard lors du débogage?Comment afficher l'utilisation de la mémoire non gérée?

Code: pv_Memory = Marshal.AllocHGlobal (0x200000);

Je tente d'utiliser les outils de diagnostic dans Visual Studio 2015 et la mémoire peut augmenter, bien qu'elle ne semble pas séparer les objets non gérés et la mémoire.

Des conseils? Merci.

Configuration: 1. Visual Studio 2015 2. C# l'application faisant référence à une 3ème partie bibliothèque .NET, qui est un wrapper pour une bibliothèque non géré 3. Windows 7

+0

Le code généralement natif (par exemple c/c + +) doit être compilé avec certains indicateurs pour permettre la détection de fuites de mémoire et généralement vous ne savez pas si vous avez une fuite jusqu'à la fin du processus – MickyD

+0

@MickyD comment vérifier la fuite à la sortie du processus? – sammy

+0

Microsoft CRT le fait – MickyD

Répondre

0

Utiliser MS outil intégré CLRProfiler et Perfmon (Moniteur de performances). vous pouvez obtenir sa documentation sur internet voir ce link. vérifiez également l'outil ILDASM (IL Disassembler).

1

Lorsque vous utilisez AllocHGlobal, vous allouez à partir du tas C/C++ non géré. Vous pouvez suivre cela avec le suivi d'allocation de tas.

class Program 
{ 
    private static IntPtr pv_Memory; 

    static void Main(string[] args) 
    { 
     Console.ReadLine(); 
     for(int i=0;i<10;i++) 
     { 
      pv_Memory = Marshal.AllocHGlobal(0x200000); 
     } 

     Console.WriteLine("Hello World!"); 
     Console.ReadLine(); 

    } 
} 

XPerf de la boîte à outils de performances de Windows vous permet de joindre à un processus déjà en cours pour obtenir des données d'allocation de tas.

enter image description here

Vous pouvez afficher les données avec WPA. Un bon article est ici: http://blogs.microsoft.co.il/sasha/2014/12/02/diagnosing-native-memory-leaks-etw-wpa/

Ceci est assez puissant, mais il faut un peu de pratique.

+0

Nice! +1 bon monsieur – MickyD