根据.NET MemoryStream - Should I set the capacity?,如果您事先知道MemoryStream,则最好设置它的初始容量。
在我的代码中,我(从第三方库)接收到Stream对象。此Stream
包裹在GetObjectResponse
类周围。
由于此类将在交易结束后处理,因此我需要复制接收到的流,以便以后可以继续使用它。Stream
类公开了Length属性来确定流的长度,因此,作为开始复制过程的第一步,我开始编写:
Stream destination = new MemoryStream(response.ResponseStream.Length);
但是编译器会抛出一个错误,指出
MemoryStream
没有采用long
参数,而是采用了int
。他们为什么要这样做?
如果
MemoryStream
从Stream
扩展,则意味着它可以具有较长的Length
。如果它可以具有long
大小,那么为什么不能使用long
初始容量呢?我试图避免不带任何容量的流初始化,因为我想利用这一事实,即我知道流将有多大,但是构造函数似乎正在限制这一愿望。
我该如何处理?为什么
MemoryStream
无法使用long
容量? 最佳答案
MemoryStream
目前不支持超过2GB的数据。这是当前的限制。原则上它不一定必须存在。
这只是功能尚未实现(尚未)的一种情况。
在当前的CLR上,实现更大的流是困难的,当前的CLR仅支持包含约int.MaxValue
元素的数组。
关于c# - 为什么MemoryStream不提供具有 “long”容量的构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32587507/