我正在升级我的 C# 解决方案以使用新的 Azure SDK 2.0 库。我做了一些小的更改来解释 2.0 库中的重大更改,但除此之外,它是相同的代码。我已经针对本地存储进行了测试,一切似乎都工作正常,但是当我针对生产 Azure Blob 存储进行测试时,仅检查 Blob 项是否存在就需要花费大量时间。简单地返回一个 bool 值来指示该项目是否存在,实际上需要一分钟甚至更多的时间。
在下面的代码示例中,需要很长时间才能完成的行是“if (!blob.Exists())”。
public byte[] GetBlobContent(string blobName)
{
if (blobName == "") return null;
var blobClient = _storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(_containerName);
var blob = container.GetBlockBlobReference(blobName);
if (!blob.Exists())
{
return null;
}
byte[] buffer;
using (var ms = new MemoryStream())
{
blob.DownloadToStream(ms);
buffer = ms.ToArray();
}
return buffer;
}
我需要对代码进行其他更改才能使其像以前一样执行吗?
最佳答案
另一种方法是跳过 Exists() 检查,如果 blob 不存在,则让 DownloadToStream 失败。您将需要在 DownloadToStream 周围有一个 try/catch block 来处理“预期”失败。这种方法可以为每个 Blob 读取节省往返存储的时间,因为它只需进行一次远程调用,而不是两次。
关于azure - 检查 Azure blob 容器中是否存在项目需要很长时间(SDK 2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16681512/