gpt4 book ai didi

c# - 上传 Blob 时引发类型 'System.OutOfMemoryException' 的异常

转载 作者:行者123 更新时间:2023-11-30 14:34:59 26 4
gpt4 key购买 nike

我正在尝试压缩一个 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);
}

我正在 64 位 Windows 2k8 服务器和 4GB 内存上运行。是 RAM 问题还是任何地址空间问题。请帮我解决这个问题

-马亨德

-马亨德

最佳答案

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

blob.UploadFromStream(compressedStream);

如果您需要进行预处理工作(并且不能仅按原样传递流),则使用临时文件(再次通过较小的缓冲区进行压缩/解压缩),然后只需手动文件流到上传 API。

流的重点在于它是一根软管而不是一个水桶。您不应该尝试一次将所有内容都存入内存中。

对象大小和数组大小存在限制,无法使用 8GB 字节数组。当有要求这样做时,就会有加载巨大对象的邪恶方法,但是:在这种情况下这是完全不合适的。很简单——您只需要正确使用流 API 即可。

关于c# - 上传 Blob 时引发类型 'System.OutOfMemoryException' 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13000230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com