gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:03 24 4
gpt4 key购买 nike

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

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

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

有什么建议吗?谢谢。

配置:1. Visual Studio 20152. 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 允许您附加到已运行的进程以获取堆分配数据。

enter image description here

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

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

关于c# - 如何查看非托管内存使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44962472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com