从Azure存储获取Blob文件名的最快方法

时间:2019-07-23 04:12:33

标签: c# azure azure-storage-blobs

我正在尝试列出Azure存储中的Blob文件名称。我不希望Blob文件中存在内容,只想列出名称。

这是我目前的做法。

public static async Task<List<string>> GetBlobList()
{
    var cloudBlobContainer = await CreateCloudBlobContainer();
    BlobContinuationToken continuationToken = null;

    List<string> blobList = new List<string>();

    do
    {
        BlobResultSegment response;

        response = await cloudBlobContainer
                            .ListBlobsSegmentedAsync(null, true, BlobListingDetails.None, 5000, continuationToken, null, null);

        continuationToken = response.ContinuationToken;

        foreach (CloudBlockBlob cloudBlob in response.Results.OfType<CloudBlockBlob>())
        {
            blobList.Add(cloudBlob.Name);
        }
    }
    while (continuationToken != null);
    return blobList;
}

它工作得很好,但是要检索11000个Blob文件名,平均需要大约 10秒

是否有改善的方法?我不在这里寻找具体的答案,指针应该很好。

2 个答案:

答案 0 :(得分:1)

我认为这已经是检索所有blob文件名的最快方法。

但是,也许可以通过在e上托管一个小型REST API来稍微提高性能。 G。与Blob存储位于相同位置的Azure功能。然后,此函数 only 返回一个名称列表(ListBlobsSegmentedAsync确实会返回更多元数据,这会增加有效负载/加载时间)。使用这种方法,您还将只有一个远程请求。

答案 1 :(得分:0)

我有一个想法可能会加速在多线程中列出blob名称。

根据如下所示的API参考CloudBlobContainer.ListBlobsSegmentedAsync Method,此方法的第一个参数prefix可用于列出以prefix开头的blob名称,例如{{1 }}以前缀abc.txt开头。

enter image description here

因此,假设容器中的这些blob名称以aa-zA-Z或其他有效字符或您在容器中已知的这些前缀词开头,则可以同时进行在多线程中列出这些不同前缀词的blob名称,以减少通过0-9链接到下一个列表所花费的时间。

同时,如果您通过有序的前缀词获得多线程的响应,则最终的合并列表将进行排序,而无需其他排序操作。

希望有帮助。