如何查看给定 .NET 应用程序中的内存分配?

Posted

技术标签:

【中文标题】如何查看给定 .NET 应用程序中的内存分配?【英文标题】:How do I see memory allocation in a given .NET application? 【发布时间】:2018-10-15 09:09:57 【问题描述】:

我需要检查堆中分配了多少内存。有没有办法使用 C# 以编程方式获取此值?

我知道System.Runtime.InteropServices.Marshal.SizeOf(...),但这只能告诉我对象的大小。

【问题讨论】:

【参考方案1】:

使用PerformanceCounter,您可以从您自己的进程甚至其他进程中查询“# Bytes in all Heaps”。

使用“.Net CLR 内存”类别查看大量可用的计数器。

您必须了解 PerformanceCounter 和 Jon Skeet 提出的 GC.GetTotalMemory 之间的系统负载差异。

【讨论】:

【参考方案2】:

GC.GetTotalMemory 能满足您的所有需求吗?

(请注意,SizeOf 也只告诉您 编组 的大小 - 不一定是内存中的大小。)

【讨论】:

甜蜜。您是否也知道如何获取已实例化的某个特定类的实例数量? @Spoike:不,我不相信没有在分析 API 下运行的信息是可用的。

以上是关于如何查看给定 .NET 应用程序中的内存分配?的主要内容,如果未能解决你的问题,请参考以下文章

如何知道分配给定内存块的内容? [关闭]

C中结构中的指针-如何将给定的void指针的值分配给结构中的指针[关闭]

在 .NET 中的 CLR 上下文中,堆栈空间是如何分配的

Android 查看每个应用的最大可用内存

.NET 可用内存使用情况(如何防止过度分配/释放内存给操作系统)

.net 中的堆栈和堆内存分配