首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >上传Blob时引发“System.OutOfMemoryException”类型的异常

上传Blob时引发“System.OutOfMemoryException”类型的异常
EN

Stack Overflow用户
提问于 2012-10-21 17:21:18
回答 2查看 3.2K关注 0票数 3

我试图压缩一个大的8gb文件并将压缩的文件上传到Blob中。压缩文件大小约为800 to。现在,当我尝试上传到Azure中时,我会得到异常的‘System.OutOfMemoryException’,我至少压缩3-4个文件,而大小是3Gb、4GB、8GB的文件,并且保持上传到BLOB。

这是压缩代码

代码语言:javascript
复制
 public string UploadFile(string fileID, string fileName, string choice,Stream CompressedFileStream)
    {
       byte[] data = new byte[CompressedFileStream.Length];
        CompressedFileStream.Read(data, 0, data.Length);
        long fileSize = CompressedFileStream.Length;
        inputStream.Dispose();   

   }

        blob.ServiceClient.WriteBlockSizeInBytes = 4 * 1024 * 1024;
        blob.ServiceClient.ParallelOperationThreadCount = 5; 
        //this will break blobs up automatically after this size
        blob.ServiceClient.SingleBlobUploadThresholdInBytes = 12582912;
        startTime = DateTime.Now;
                    using (MemoryStream ms = new MemoryStream(data))
                    {
                        ms.Position = 0;
                        blob.UploadFromStream(ms);
                    }

我在64位windows 2k8服务器和4GB内存上运行。是RAM问题还是地址空间问题。请在这个问题上帮助我

-Mahender

-Mahender

EN

回答 2

Stack Overflow用户

发布于 2012-10-21 17:27:02

您很少像这样将一个巨大的文件加载到内存中。您通常应该做的是使用一个小缓冲区(8k、16k等)循环,并将其作为流上传。取决于整个场景是什么,也许只是:

代码语言:javascript
复制
blob.UploadFromStream(compressedStream);

如果您需要做预处理工作(而且您不能按原样传递流),那么使用一个临时文件(同样,通过一个小型缓冲区进行压缩/解压),然后将文件流传递到上传API。

溪流的全点是软管,而不是水桶。您不应该尝试将其同时存储在内存中。

有对象大小和数组大小限制,阻止您有一个8GB字节数组。当有要求这样做的时候--,有一些加载大型对象的坏方法,但是:在这种情况下,这是完全不合适的。简单地说-您只需要正确地使用流API。

票数 5
EN

Stack Overflow用户

发布于 2012-10-21 17:29:25

可能有两个问题,因为这并不是真正清楚的从你的帖子。

1)这可能是.NET框架的肯定,如果您的代码是编写的而不是针对64bit体系结构的。在这种情况下,您的CLR进程有3GB (非常近似)的内存限制。

2)您的代码是一个“原生”64位应用程序:因此您分配了太多的内存。可能的解决办法:

a)减少数据传输到内存块(如果这在您的情况下是可能的话)

( b)使用流,不要加载所有数据(如果可能的话)

编辑

此外,正如Marc注意到的:CLR (独立于体系结构)中的数组还有另一个内存限制,在您的情况下可能也会超过这个限制。

希望这能有所帮助。

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

https://stackoverflow.com/questions/13000230

复制
相关文章

相似问题

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