1

我正在调用一个 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 会更好吗?有没有这样做的最佳实践方法?

4

2 回答 2

2

这应该没问题 - 60MB 对于MemoryStream. 每次需要时,容量都会翻倍,因此您可能有大约 120MB 的后备阵列,但这也不应该破坏一台像样的机器。

你确定输入数据不大于那个吗?你有多少内存?你能先找出响应流的大小吗?如果您可以创建MemoryStream具有正确能力的开始,那将有所帮助。

请注意,using语句更适合处理响应流 - 调用 Close 和 Dispose 然后将变量设置为 null 是多余的。

于 2009-03-31T23:26:22.393 回答
-1

似乎内存流确实在某个时候耗尽了内存。随着文件最终存储在文件系统上,我现在从 httpwebrequest 获取原始流,并将其直接保存到文件中。

于 2009-04-04T03:28:21.097 回答