【发布时间】:2011-11-04 15:54:11
【问题描述】:
在使用大文件的Http.Post 时出现内存不足异常。当我尝试将文件流数据写入内存流时出现此异常。
【问题讨论】:
-
您正在处理地址空间碎片。当您的程序运行了一段时间后,300 MB 是相当困难的。 64 位操作系统是简单的解决方案。
标签: c# .net out-of-memory httpwebrequest
在使用大文件的Http.Post 时出现内存不足异常。当我尝试将文件流数据写入内存流时出现此异常。
【问题讨论】:
标签: c# .net out-of-memory httpwebrequest
显然,将 300mb 的数据放入内存会导致 CLR 达到其最大内存占用。您是否考虑过将文件写入其他类型的流以避免同时将其全部存储在内存中?也许您可以将文件直接写入磁盘,然后分块处理文件,而不是同时将整个文件加载到内存中。
【讨论】:
以上答案都不适合我,这个可以工作:
这几行是关键:
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(yourUri);
wr.KeepAlive = false;
wr.Timeout = System.Threading.Timeout.Infinite;
wr.ProtocolVersion = HttpVersion.Version10;
这里:
wr.AllowWriteStreamBuffering = false;
希望这可以帮助那里的人。
【讨论】:
设置 HttpWebRequest.AllowWriteStreamBuffering=false。这将导致 HWR 立即发送数据,而不是将其缓存在内存中。
【讨论】: