C#如何查找引用类型的大小

时间:2009-05-14 09:58:28

标签: c# memory size reference-type

我想知道是否有办法在C#中找到引用类型的大小。我做了一些谷歌搜索,论坛上的一般想法似乎是这是不可能的。我以为我会问你们,看看这里有没有人知道的更好。

毕竟,分析工具必须有这样做的方法吗?我知道通常不需要知道这些信息,但在某些情况下它会很有用。

2 个答案:

答案 0 :(得分:0)

可以进行粗略估计,也可以通过profilig跟踪已用内存。但JIT可以自由设置最适合的类型布局,这也可能取决于框架版本,机器配置(特别是32位与64位),框架提供商(MS,Mono,GNU.NET等)。等

提前计算它将与此类似:

  • 参考资料为32位或64位,具体视平台而定

  • 类实例具有对类型信息的内部引用(包括VTable等),以及包含的每个引用类型的引用(包括字符串或数组),以及任何结构使用的内存(这些可能布局,以便访问有效,事实上留下一些未使用的内存)。

所以问题也是,你想获得类或类和相关数据(如字段中的字符串,数组,列表,字典等)使用的内存吗?

答案 1 :(得分:0)

嗯。我将使用分析工具,但我想这样的事情可能有效:

long before = System.GC.GetTotalMemory(true);
Foo instance = new Foo();
long after = System.GC.GetTotalMemory(true);
long consumed = after - before;