根据.NET MemoryStream - Should I set the capacity?,如果您事先知道MemoryStream,则最好设置它的初始容量。

在我的代码中,我(从第三方库)接收到Stream对象。此Stream包裹在GetObjectResponse类周围。

由于此类将在交易结束后处理,因此我需要复制接收到的流,以便以后可以继续使用它。
Stream类公开了Length属性来确定流的长度,因此,作为开始复制过程的第一步,我开始编写:

Stream destination = new MemoryStream(response.ResponseStream.Length);

但是编译器会抛出一个错误,指出MemoryStream没有采用long参数,而是采用了int

他们为什么要这样做?

如果MemoryStreamStream扩展,则意味着它可以具有较长的Length。如果它可以具有long大小,那么为什么不能使用long初始容量呢?

我试图避免不带任何容量的流初始化,因为我想利用这一事实,即我知道流将有多大,但是构造函数似乎正在限制这一愿望。

我该如何处理?为什么MemoryStream无法使用long容量?

最佳答案

MemoryStream目前不支持超过2GB的数据。这是当前的限制。原则上它不一定必须存在。

这只是功能尚未实现(尚未)的一种情况。

在当前的CLR上,实现更大的流是困难的,当前的CLR仅支持包含约int.MaxValue元素的数组。

关于c# - 为什么MemoryStream不提供具有 “long”容量的构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32587507/

10-16 04:08