将大文件(300MB)写入内存流时出现内存不足异常

时间:2011-08-26 15:52:41

标签: c# .net out-of-memory httpwebrequest

使用大文件的Http.Post时,我收到内存不足异常。当我尝试将文件流数据写入内存流时,我遇到了这个异常。

3 个答案:

答案 0 :(得分:2)

显然,将300mb的数据放入内存会导致CLR达到其最大内存占用量。您是否考虑过将文件写入其他类型的流以避免同时将其全部存储在内存中?也许您可以直接将文件写入磁盘,然后以块的形式处理文件,而不是同时将整个文件加载到内存中。

答案 1 :(得分:1)

上述答案都不适合我,这个人完成了这项工作:

http://blogs.msdn.com/b/johan/archive/2006/11/15/are-you-getting-outofmemoryexceptions-when-uploading-large-files.aspx

这些行是关键:

    HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(yourUri);
    wr.KeepAlive = false;
    wr.Timeout = System.Threading.Timeout.Infinite;
    wr.ProtocolVersion = HttpVersion.Version10;

在这里:

wr.AllowWriteStreamBuffering = false;

希望这可以帮助那些人。

答案 2 :(得分:0)

设置HttpWebRequest.AllowWriteStreamBuffering = false。这将导致HWR立即发送数据,而不是在内存中缓冲它。