如何查找.NET对象的大小?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (39)

我试图找出我的对象需要多少内存来查看其中有多少内存在大对象堆上(这是超过85,000个字节)。

是简单的,如为int添加4,为long添加4,为每个对象添加任何引用类型等,或者在方法,属性等方面有额外开销(如果在64位上)。

提问于
用户回答回答于

不要忘记,实际对象的大小不包括它引用的任何对象的大小。

唯一可能导致大型对象堆的事情是数组和字符串 - 其他对象往往本身相对较小。即使是一个拥有(比如说)10个引用类型变量(x86上每个4个字节)和10个GUID(每个16个字节)的对象也只会占用大约208个字节(对于类型引用和同步块有一些开销)。

同样,当考虑数组的大小时,不要忘记,如果元素类型是引用类型,那么它只是数组本身的引用大小。换句话说,即使你有一个包含20,000个元素的数组,即使它引用了更多的数据,数组对象本身的大小也只会超过80K(在x86上)。

用户回答回答于

请按照以下步骤获取对象的大小。

1)转到Visual Studio(2010)项目属性 - >调试选项卡 - >启用非托管代码调试。

2)转到Visual Studio调试菜单 - >选项和设置 - >调试 - >符号。

3)在那里启用Microsoft Symbol Server,保留默认值(符号可以开始下载)

4)在你的代码中设置断点,开始调试(F5)。

5)打开调试 - > Windows - >立即窗口。

6)输入.load sos.dll(Strike的儿子)

7)输入!DumpHeap -type MyClass(你想要查找的对象的大小)

8)从输出中找到对象的地址即(00a8197c)

地址MT大小00a8197c 00955124 36

9)接下来,!ObjSize 00a8197c

10)你去 - > sizeof(00a8197c)= 12(0x48)字节(MyClass)

扫码关注云+社区