首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ResponseStream创建内存流时内存不足异常

从ResponseStream创建内存流时内存不足异常
EN

Stack Overflow用户
提问于 2009-03-31 23:17:37
回答 2查看 3.1K关注 0票数 1

我正在调用一个httprequest,它在响应流中返回一个pdf文件。这适用于较小的pdf,但不是文件大小约为25-30MB,它返回一个内存不足的异常。

代码语言:javascript
复制
        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是不是更好?有没有一种最佳实践方法来做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-04 03:28:21

看起来内存流确实在某一时刻耗尽了内存。当文件最终存储在文件系统中时,我现在从httpwebrequest中获取原始流,并将其直接保存到一个文件中。

票数 -1
EN

Stack Overflow用户

发布于 2009-03-31 23:26:22

这应该很好- 60MB对于MemoryStream来说是相当小的。每次需要时,容量都会翻一番,所以你可能有大约120MB的后备数组,但同样,这不应该破坏一台像样的机器。

您确定输入的数据不会大于该值吗?你有多少内存?你能先找出响应流的大小吗?如果您能够创建具有正确容量的MemoryStream,这将会有所帮助。

请注意,using语句更适合于处理响应流-调用Close和Dispose,然后将变量设置为null太过分了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/703454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档