gpt4 book ai didi

c# - 什么定义了内存流的容量

转载 作者:太空狗 更新时间:2023-10-29 22:30:33 25 4
gpt4 key购买 nike

我正在使用以下代码计算对象(正在填充的列表)的大小:

 long myObjectSize = 0;
System.IO.MemoryStream memoryStreamObject = new System.IO.MemoryStream();
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter binaryBuffer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
binaryBuffer.Serialize(memoryStreamObject, myListObject);
myObjectSize = memoryStreamObject.Position;

memoryStreamObject 的初始容量为 1024 enter image description here

后来(在列表中添加更多元素后)显示为 2048。 enter image description here

而且它似乎随着流内容的增加而增加。那么这个场景下容量的作用是什么?

最佳答案

这是MemoryStream内部实现造成的。 Capacity 属性是内部缓冲区的大小。如果使用固定大小的缓冲区创建 MemoryStream,这是有意义的。但在您的情况下,如果缓冲区太小,MemoryStream 可能会增长,并且实际实现会使缓冲区的大小加倍。

内存流代码

private bool EnsureCapacity(int value)
{
if (value < 0)
{
throw new IOException(Environment.GetResourceString("IO.IO_StreamTooLong"));
}
if (value > this._capacity)
{
int num = value;
if (num < 256)
{
num = 256;
}
if (num < this._capacity * 2)
{
num = this._capacity * 2;
}
if (this._capacity * 2 > 2147483591)
{
num = ((value > 2147483591) ? value : 2147483591);
}
this.Capacity = num;
return true;
}
return false;
}

在 Write 的某处

int num = this._position + count;
// snip
if (num > this._capacity && this.EnsureCapacity(num))

关于c# - 什么定义了内存流的容量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32985374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com