我试图压缩一个大的8GB文件并将压缩文件上传到Blob.压缩文件大小约为800MB.现在,当我尝试上传到Azure时,我得到异常'System.OutOfMemoryException"我压缩至少3-4个文件,同时大小为3Gb,4GB,8GB并保持上传到BLOB.
这是压缩的代码
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);
}
Run Code Online (Sandbox Code Playgroud)
我在64位Windows 2k8服务器和4GB内存上运行.是RAM问题还是任何地址空间问题.请帮我解决这个问题
-Mahender
-Mahender
你很少将大文件加载到内存中.你应该平时做的是有一个很小的缓冲区(8K,16K等)循环,并上传它作为流.根据完整场景的不同,可能只是:
blob.UploadFromStream(compressedStream);
Run Code Online (Sandbox Code Playgroud)
如果您需要进行预处理工作(并且您不能按原样传递流),那么使用临时文件(再次通过一个小的缓冲区进行压缩/解压缩),然后只需提交文件 - 流到上传API.
流的整个点是它是一个软管而不是一个桶.你不应该试着让它全部在内存中.
有对象大小和数组大小限制,阻止您拥有8GB字节数组.当有要求这样做时,有加载大型物体的邪恶方法,但是:在这种情况下,这将是完全不合适的.简单地说 - 您只需要正确使用流API.
| 归档时间: |
|
| 查看次数: |
2703 次 |
| 最近记录: |