如何在c#项目中的Visual Studio中查看和监视非托管内存使用情况?有没有办法检查以后在调试时是否已正确删除已分配的内存?
代码: pv_Memory = Marshal.AllocHGlobal(0x200000);
我正在尝试使用'诊断工具'在Visual Studio 2015中,可以看到内存增加,但它似乎没有分离出非托管对象和内存。
任何提示?感谢。
配置: 1. Visual Studio 2015 2. C#应用程序引用第三方.NET库,它是非托管库的包装器 3. Windows 7
答案 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允许您附加到已经运行的进程以获取堆分配数据。
您可以使用WPA查看数据。 这里有一篇好文章: http://blogs.microsoft.co.il/sasha/2014/12/02/diagnosing-native-memory-leaks-etw-wpa/
这是非常强大但需要一些练习。
答案 1 :(得分:0)
使用MS内置工具CLRProfiler和Perfmon(性能监视器)。您可以在互联网上获取其文档,请参阅此link。检查ILDASM(IL反汇编程序)工具。