什么是C#中的大对象?

时间:2014-11-19 19:52:49

标签: c#

我可以将100万个整数数组作为大对象调用吗?或者该对象的一个​​实例应该是> 85 KB被视为大对象?

如果我创建一个类似int [1000000]的数组。每个成员的整个对象被视为一个大小为>的对象。 85 KB。正确?

如果我有一个班级X {int i;字符串j} ..然后列表有计数> 100000.这会被保存到LOH吗?

基本上我的意思是如果像X类这样的对象的大小是8.6KB并且我创建了像List myList那样的数据结构。然后,如果列表计数为9,那么它不是LO,但如果它有计数10那么它是?

我想要一个最后的答案(几乎全部答案): 现在我知道该数组是8个字节的指针集合。所以一个数组要成为大对象,它应该有85000/8个元素或更多元素。这是对的吗?

2 个答案:

答案 0 :(得分:2)

任何大于85,000字节的对象都被视为一个大对象,在垃圾回收期间会被区别对待。如果一个数组的所有引用(也就是指针)构成了这个数量,那么它本身可以超过85,000字节。

对于数组,实际计数不是由对象的大小组成,而是由它们的引用组成。假设你有一个Customer数组,让我们假设一个Customer有3个整数,每个大小为8个字节,每个引用的大小也是8个字节。然后,10个客户的数组实际占用80个字节,而不是240个。每个客户的24个字节是单独的对象。

有关详细信息,请参阅this article,另请参阅Large Object Heap Improvements in .NET 4.5

答案 1 :(得分:0)

如果您在垃圾收集的上下文中询问,那么85 KB将是一个大对象,因为大对象会立即标记为第2代对象。