4

我正在升级我的 c# 解决方案以使用新的 Azure SDK 2.0 库。我做了一些小改动来解释 2.0 库中的重大更改,但除此之外,它是相同的代码。我已经针对本地存储进行了测试,一切似乎都运行良好,但是当我针对生产 Azure blob 存储进行测试时,仅检查 blob 项是否存在就需要花费大量时间。简单地返回一个指示该项目是否存在的布尔值实际上需要一分钟甚至更多。

在下面的代码示例中,需要很长时间才能完成的行是“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;
    }

我需要对我的代码进行其他更改以使其像以前一样执行吗?

4

2 回答 2

1

另一种方法是跳过 Exists() 检查,如果 blob 不存在,则让 DownloadToStream 失败。您将需要在 DownloadToStream 周围使用 try/catch 块来处理“预期”失败。这种方法为您节省了每次读取 blob 的往返存储,因为它只需进行一次远程调用而不是两次。

于 2013-05-27T18:17:44.720 回答
0

Fiddler没有透露任何信息。我遇到了类似的问题,进程无限期挂起,直到超时开始。尝试替换调用CloudTable.CreateIfNotExistswith CloudTable.CreateIfNotExistsAsync,调用CloudTable.Executewith CloudTable.ExecuteAsync

不幸的是,我不能告诉你为什么会这样。在撰写本文时,WindowsAzure.Storage-PremiumTable Nuget包处于预发布模式,并且可能存在错误。

于 2017-08-09T22:37:12.513 回答