2011-03-25 66 views
1

我有一个lineEntitys集合。我想看看它的大小在内存中有多大。我可以了解一个Collection使用多少内存?

有没有找到类似于使用sizeof(int)来实现这个的方法?

+0

在运行时?在编译时?在运行时使用外部进程(如CLR Profiler)? – earlNameless 2011-03-25 11:48:25

+0

我会在运行时需要它,最好不要使用外部进程,但如果它是最好的/唯一的方法,我可以接受一个。 – Andy 2011-03-25 11:58:33

+0

不太可能。主要问题基本上是集合的一部分而不是。对象是否包含?当你总结5个具有相同题材的集合时,你会数它们5次吗? – TomTom 2011-03-25 12:04:07

回答

5

CLR Profiler for .NET Framework 4

CLR分析器包括多个 非常有用的分配 轮廓的视图,包括 分配类型,分配和呼叫 图表,示出的 GC中,时间线的直方图各代以及由此产生的 收集后的托管堆的状态,以及显示 每个方法的分配和组装 负载的呼叫树。

另一种选择是在两个调用来包装你的分配GC.GetTotalMemory():

 long memoryUsed = GC.GetTotalMemory(false); 

此外,Inspect and Optimize Your Program's Memory Usage with the .NET Profiler API

+0

这在运行时以编程方式很难做到。 – earlNameless 2011-03-25 11:47:54

+0

这个问题没有明确说它需要在运行时执行,只是大小需要确定。 – 2011-03-25 11:50:16

+0

我同意这个问题不够具体,但基于sizeof(int)在问题中使用,它可能最终会在运行时。我为这个问题增加了一个澄清的评论,因为解决方案可能会有很大的不同。 – earlNameless 2011-03-25 11:52:28

相关问题