我正在调用httprequest,它在响应流中返回一个pdf文件。这适用于较小的pdf,但文件不是大约25-30MB,它返回内存不足异常。
MemoryStream memStream = new MemoryStream();
byte[] buffer = new byte[2048];
int bytesRead = 0;
do
{
bytesRead = _ResponseStream.Read(buffer, 0, buffer.Length);
memStream.Write(buffer, 0, bytesRead);
} while (bytesRead != 0);
_ResponseStream.Close();
_ResponseStream.Dispose();
_ResponseStream = null;
if (memStream.Length > 0)
return memStream;
else return null;
机器规格为四核3.0GZ,4GB RAM(物理盒)。 PDF可能达到60MB的大小。多个用户可以同时下载。这会怎样影响呢?将响应流直接带到FileStream会更好吗?这样做有最佳实践方法吗?
答案 0 :(得分:2)
那应该没问题 - MemoryStream
的60MB相当小。每次需要时,容量会增加一倍,因此你可能拥有大约120MB的后备阵列,但同样不应该破坏一台不错的机器。
您确定输入数据不比这大吗?你有多少记忆?你能先找到响应流的大小吗?如果您可以创建具有合适容量的MemoryStream
,那将会有所帮助。
请注意,using
语句更适合处理响应流 - 调用Close和Dispose然后将变量设置为null是过度的。
答案 1 :(得分:-1)
似乎内存流确实在某个时刻耗尽了内存。由于文件最终存储在文件系统中,我现在从httpwebrequest获取原始流,并将其直接保存到文件中。