azure - 检查 Azure blob 容器中是否存在项目需要很长时间(SDK 2.0)

标签 azure azure-blob-storage

我正在升级我的 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/

相关文章:

c# - SDK 2.3 内的 StorageClient 1.7 库。会被支持吗?

java - 将 Akka HTTP 部署到 Azure

Azure SAS 连接不适用于 Azure.Storage.Blobs

azure - Powershell - 设置环境变量而无需关闭应用程序

azure - 创建索引器,将数据源作为索引内 JSON 文档中的字段

c# - 文件上传到 Web API 和 Azure 抛出 HttpException

Azure数据工厂: StartDate in Default Parameters

c# - 连接到 .NET 3.1 Azure Function 项目 Startup.cs 中的 Entity Framework Core

c# - Azure BlobStorage 流对大于 25 MB 的文件关闭

c# - 从 Azure Blob 存储读取文本文件值