如何在 C# 项目的 Visual Studio 中查看和监控非托管内存使用情况?有没有办法在调试时检查分配的内存是否已被正确删除?
代码: pv_Memory = Marshal.AllocHGlobal(0x200000);
我正在尝试使用 Visual Studio 2015 中的“诊断工具”,可以看到内存在增加,但它似乎没有分离出非托管对象和内存。
有什么建议吗?谢谢。
配置: 1. Visual Studio 2015 2. C# 应用程序引用第 3 方 .NET 库,它是非托管库的包装器 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 性能工具包中的 xperf 允许您附加到已运行的进程以获取堆分配数据。
您可以使用 WPA 查看数据。 一篇好文章在这里: http://blogs.microsoft.co.il/sasha/2014/12/02/diagnosing-native-memory-leaks-etw-wpa/
这很强大,但需要一些练习。
关于c# - 如何查看非托管内存使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44962472/