【发布时间】:2017-10-25 17:46:55
【问题描述】:
我正在尝试从网络应用程序上传一个大文件,并将其作为内存流供以后处理。尝试将 HttpPostedFileBase 的输入流复制到新的 MemoryStream 时,我收到了 OutOfMemory 异常。在故障排除期间,我尝试创建一个新的 MemoryStream 并分配与 InputStream 的长度(935,638,275)相同的空间量(大致),如下所示:
MemoryStream memStream = new MemoryStream(935700000);
即使这样做也会导致这一行出现 System.OutOfMemoryException。
我对MemoryStreams只是稍微了解,这似乎和MemoryStreams如何缓冲数据有关。有没有一种方法可以让我轻松地将所有数据放入一个 MemoryStream 中?
【问题讨论】:
-
为什么是内存流?如果您要稍后处理它,为什么不将它复制到临时文件夹?在我看来,将这么大的数据存储在内存中(导致为文件分配 800MB 的内存)不是一个好的设计决策,没有冒犯。
-
分配如此大的连续内存只有在您消除抖动强制时才能工作。 Project > Properties > Build 选项卡,取消勾选“Prefer 32-bit”复选框。
标签: c# memorystream