(C#)可以在CLRProfiler中查看结构吗?

时间:2009-11-23 03:39:37

标签: c# struct

由于CLRProfiler使用像HEAP统计这样的词,OBJECTS最终确定,它让我觉得它最初只显示盒装结构?那么如果结构是我的问题来源怎么办?我怎么能用CLRProfiler知道呢?

1 个答案:

答案 0 :(得分:2)

根据文件

  

“CLRProfiler是一个专注于分析垃圾收集器堆中发生的事情的工具”

很自然地,你会看到有关堆的各种统计数据。

结构是值类型,因此当它们自己分配时,它们被分配在堆栈上。堆栈在堆栈展开期间被清理,因此不受GC的垃圾收集。如果值类型被装箱或更常见,如果它们是引用类型的一部分,它们的值将存储在堆上。

我的猜测是,如果结构是问题的根源,那是因为您的应用程序存储了大量这些问题。这通常使用数组(它是许多.NET集合的基础类型)来完成。 Array是引用类型,因此它存储在堆上。如果数组包含结构,则值也会作为数组实例的一部分进入堆。

换句话说,如果要在运行时检查独立结构,则必须在运行的托管线程的堆栈上找到它们。说实话,我对CLRProfiler不太熟悉,所以我不知道它是否支持。但是,您可以使用WinDbg等调试器进行检查。另一方面,如果有问题的结构存储在集合中,则必须在堆上找到实例。