C#中等大小集合中的大型对象

C#中等大小集合中的大型对象,c#,.net,large-object-heap,C#,.net,Large Object Heap,我对记忆问题还很陌生。希望你不要认为这是一个愚蠢的问题 我知道大于85000字节的内存将被放入C语言的LOH中# i、 e 我想知道一个大小为10000-20000、对象包含10个成员变量(字节类型)的集合是否会放入LOH或SOH?对象数组的大小是对象数乘以指针大小。这是因为只有值类型存储在数组本身中,引用类型(对象)将存储在其他位置,并且不会计入数组的大小。因此,85000/4=21250个对象和85000/8=10625个对象可以分别以32位和64位模式存储在SOH上的阵列中 编辑: 感谢H

我对记忆问题还很陌生。希望你不要认为这是一个愚蠢的问题

我知道大于85000字节的内存将被放入C语言的LOH中# i、 e


我想知道一个大小为10000-20000、对象包含10个成员变量(字节类型)的集合是否会放入LOH或SOH?

对象数组的大小是对象数乘以指针大小。这是因为只有值类型存储在数组本身中,引用类型(对象)将存储在其他位置,并且不会计入数组的大小。因此,85000/4=21250个对象和85000/8=10625个对象可以分别以32位和64位模式存储在SOH上的阵列中

编辑:
感谢Hans Passant指出,这假设使用的集合类型是数组而不是列表。列表将自身调整为比内容大,以避免分配过多。有关详细信息,请参见

这种数学方法不适用于集合类型,它实际上是16384。查看详细信息。感谢您的评论!您讨论的调整大小仅适用于列表,而不是数组,因此与此问题没有直接关系。但是,我还是应该添加警告,以便将包含大量对象的列表保存在SOH中,我们需要生成一个包含列表数组的分区列表。分区列表将动态创建一个新列表,并在列表容量超过10000时添加到arry中。该列表是否有效?是否有效。但一旦你的名单达到这个规模,LOH就是更快的选择。我不明白你为什么坚持把它放在办公室里?
Byte[] hugeByteCollection = new Byte[85000];