【问题标题】:MemoryStream - OutOfMemoryException when trying to allocate spaceMemoryStream - 尝试分配空间时出现 OutOfMemoryException
【发布时间】: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


【解决方案1】:

我不确定处理涉及什么,但 HttpPostedFileBase 已经包含一个带有数据的流。您可以使用该流来处理您需要做的事情。

如果确实需要在流上来回或多次移动,而输入流不支持搜索/定位,则可能需要先将数据流式传输到临时本地文件,然后使用文件流对该文件进行处理。

如果有很多人通过您的网络应用上传,您指定的数组大小将使用 MemoryStream 快速耗尽所有内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2023-03-28
    • 2017-06-17
    • 2011-02-02
    相关资源
    最近更新 更多