StringBuilder增长超过85k并转向LOH?

nem*_*emo 1 .net clr large-object-heap

可能重复:
StringBuilder的容量如何变化?

假设分配了一个StringBuilder,然后它增长到超过85k,它会被移到大对象堆上吗?

xan*_*tos 5

StringBuilder 没有"成长".

在4.0之前的SB中,它只是分配了一个新的更大的缓冲区并将内容从旧的复制到新的.所以最后是的,内部缓冲区被移到了LOH.SB对象不是,因为它非常小(为了简单起见,它可能只是缓冲区的引用和缓冲区中字符串的长度.它稍微复杂一点,因为它实现了写后复制使用ToString方法.因此,ToString方法制得的缓冲只读并返回它作为一个字符串,以及任何其他写入到SB复制的缓冲液).

在4.0中,SB使用类似缓冲区的链接列表(它被称为"绳索"),并且它们总是小到不能去LOH.