如何查看非托管内存使用情况?

时间:2017-07-07 04:17:16

标签: c# .net visual-studio memory-leaks unmanaged

如何在c#项目中的Visual Studio中查看和监视非托管内存使用情况?有没有办法检查以后在调试时是否已正确删除已分配的内存?

代码: pv_Memory = Marshal.AllocHGlobal(0x200000);

我正在尝试使用'诊断工具'在Visual Studio 2015中,可以看到内存增加,但它似乎没有分离出非托管对象和内存。

任何提示?感谢。

配置: 1. Visual Studio 2015 2. C#应用程序引用第三方.NET库,它是非托管库的包装器 3. Windows 7

2 个答案:

答案 0 :(得分:1)

当您使用AllocHGlobal时,您将从非托管C / C ++堆分配。您可以使用堆分配跟踪来跟踪此信息。

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();

    }
}
来自Windows Performance Toolkit的xperf允许您附加到已经运行的进程以获取堆分配数据。

enter image description here

您可以使用WPA查看数据。 这里有一篇好文章: http://blogs.microsoft.co.il/sasha/2014/12/02/diagnosing-native-memory-leaks-etw-wpa/

这是非常强大但需要一些练习。

答案 1 :(得分:0)

使用MS内置工具CLRProfiler和Perfmon(性能监视器)。您可以在互联网上获取其文档,请参阅此link。检查ILDASM(IL反汇编程序)工具。