.NET 分配分析

Posted

技术标签:

【中文标题】.NET 分配分析【英文标题】:.NET allocations profiling 【发布时间】:2010-04-23 08:56:22 【问题描述】:

我需要一种方法来跟踪 .NET 应用程序中在调试我的应用程序过程中的单个步骤中发生的所有分配。我的意思是,当我在调试器中,单步执行代码时,我想单步查看发生了什么分配。有没有工具或方法可以做到这一点?我尝试了几个内存分析器,包括 CLR 分析器、JetBrains 和 .NET Memory Profiler 3.5,但它们似乎都没有提供这种功能。

【问题讨论】:

【参考方案1】:

您可以将 WinDBG 与类似的东西一起使用

.load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\SOS.dll
.logopen log.txt
bp mscorwks!FastAllocateObject "!DumpMT poi(@esp+4); g"
bp mscorwks!AllocateObject "!DumpMT poi(@esp+4); g"

这应该会在 log.txt 中传递给这些函数的所有 AllocateObject/FastAllocateObject 和转储 MethodTable 上中断。随着分配对象数量的增加,它可能会变得非常慢

【讨论】:

以上是关于.NET 分配分析的主要内容,如果未能解决你的问题,请参考以下文章

.NET 如何测量请求中分配的字节数?

kafka源码分析 创建Topic时 分区分配分析

jvm的逃逸分析

浅析值类型与引用类型的内存分配

十逃逸分析和栈上分配

3.内存分配逃逸分析与栈上分配直接内存和运行时常量池基本类型的包装类和常量池TLAB可达性分析算法(学习笔记)