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

问题描述 投票:0回答:2

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

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

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

有什么建议吗?谢谢。

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

c# .net visual-studio memory-leaks unmanaged
2个回答
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 允许您附加到已运行的进程以获取堆分配数据。

[![在此处输入图像描述][1]][1]

您可以使用WPA查看数据。 一篇好文章在这里: https://learn.microsoft.com/en-us/windows-hardware/test/wpt/memory-footprint-optimization-exercise-2

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.