我正在调用一个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,4 4GB (物理盒)。PDF可能会达到60MB的大小。多个用户可以同时下载。这会对它产生怎样的影响?将响应流直接发送到FileStream是不是更好?有没有一种最佳实践方法来做到这一点?
发布于 2009-04-04 03:28:21
看起来内存流确实在某一时刻耗尽了内存。当文件最终存储在文件系统中时,我现在从httpwebrequest中获取原始流,并将其直接保存到一个文件中。
发布于 2009-03-31 23:26:22
这应该很好- 60MB对于MemoryStream来说是相当小的。每次需要时,容量都会翻一番,所以你可能有大约120MB的后备数组,但同样,这不应该破坏一台像样的机器。
您确定输入的数据不会大于该值吗?你有多少内存?你能先找出响应流的大小吗?如果您能够创建具有正确容量的MemoryStream,这将会有所帮助。
请注意,using语句更适合于处理响应流-调用Close和Dispose,然后将变量设置为null太过分了。
https://stackoverflow.com/questions/703454
复制相似问题