我正在尝试使用Microsoft.Azure.Storage.Blob(9.4.2)将非常大(> 100GB)的Blob上传到Azure。但是,看起来,即使使用基于流的Blob写入API,该库也会根据文件的大小分配内存(1.2GB的测试文件将导致2GB的进程内存占用)。我需要它来保持不变的内存。我的代码如下(使用UploadFromFile,UploadFromStream等类似的结果):
var container = new CloudBlobContainer(new Uri(sasToken));
var blob = container.GetBlockBlobReference("test");
const int bufferSize = 64 * 1024 * 1024; // 64MB
blob.StreamWriteSizeInBytes = bufferSize;
using (var writeStream = blob.OpenWrite())
{
using (var readStream = new FileStream(archiveFilePath, FileMode.Open))
{
var buffer = new byte[bufferSize];
var bytesRead = 0;
while ((bytesRead = readStream.Read(buffer, 0, bufferSize)) != 0)
{
writeStream.Write(buffer, 0, bytesRead);
}
}
}
这种行为令人莫名其妙-我在TaskMgr中看到确实确实开始上传,所以这不像是它在缓冲等待发送的内容。没有理由需要挂起以前发送的数据。有人会如何使用此API进行不重要的Blob上传?
答案 0 :(得分:0)
我建议您看一下BlobStorageMultipartStreamProvider示例,因为它显示了请求流如何“转发”到 Azure Blob 流,这可能会减少使用的内存量在服务器端上传时。
希望有帮助!