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

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

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

我试图在Visual Studio 2015中使用“诊断工具”,并且可以看到内存在增加,尽管它似乎没有分离出非托管对象和内存。

有小费吗? 谢谢。

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


当您使用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允许您附加到已经运行的进程以获取堆分配数据。

在这里输入图像描述

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

这是相当强大的,但它需要一些练习。


使用MS内置工具CLRProfiler和Perfmon(性能监视器)。 你可以在互联网上获得它的文档,看看这个链接。 检查ILDASM(IL反汇编程序)工具。

链接地址: http://www.djcxy.com/p/57047.html

上一篇: How can unmanaged memory usage be viewed?

下一篇: c++