流的容量与长度的关系

时间:2014-02-03 13:53:21

标签: c# stream copy memorystream capacity

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

1 个答案:

答案 0 :(得分:10)

  

它们应该不一样吗?

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

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

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