流的容量与长度的关系

use*_*635 1 c# memorystream copy stream capacity

当我将一些流写入新的内存流时,内存流的长度和容量最初都设置为0,并随着写入过程一起增长.但在某些时候,容量增长的速度要快于长度.
写操作完成后,我得到正确的长度(与原始输入流的长度相同),但容量更大.
这是对的吗?
它们不应该是一样的吗?
我找不到任何关于它的信息

Jon*_*eet 10

它们不应该是一样的吗?

不 - 或者至少,不一定.这基本上与List<T>容量与其数量(或相关StringBuilder)相同.我们的想法是,为了最大限度地减少复制的次数,当您需要增加容量时,可以显着增加容量 - 而不是一次只增加一个字节.因此,例如,一个策略是"最少16个字节,并在需要时将容量增加一倍".

在完成一些写操作之后,流如何知道你已经完成了?你真的希望它必须复制整个内容才能执行一个字节的写入吗?

基本上,权衡是内存与速度的关系:你的容量越大,你在副本之间快速写的就越多.