4

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

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

4

2 回答 2

2

嗯。我会使用分析工具,但我想这样的事情可能会起作用:

long before = System.GC.GetTotalMemory(true);
Foo instance = new Foo();
long after = System.GC.GetTotalMemory(true);
long consumed = after - before;
于 2009-05-14T10:06:26.867 回答
0

可以做一个粗略的估计,通过profilig跟踪使用的内存也应该是可能的。但是 JIT 可以自由设置最适合的类型布局,这也可能取决于框架版本、机器配置(尤其是 32 位与 64 位)、框架提供者(MS、Mono、GNU.NET 等)等等

提前计算将与此类似:

  • 参考是 32 位或 64 位,具体取决于平台

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

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

于 2009-05-14T10:04:16.933 回答