我正在尝试列出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秒。
是否有改善的方法?我不在这里寻找具体的答案,指针应该很好。
答案 0 :(得分:1)
我认为这已经是检索所有blob文件名的最快方法。
但是,也许可以通过在e上托管一个小型REST API来稍微提高性能。 G。与Blob存储位于相同位置的Azure功能。然后,此函数 only 返回一个名称列表(ListBlobsSegmentedAsync确实会返回更多元数据,这会增加有效负载/加载时间)。使用这种方法,您还将只有一个远程请求。
答案 1 :(得分:0)
我有一个想法可能会加速在多线程中列出blob名称。
根据如下所示的API参考CloudBlobContainer.ListBlobsSegmentedAsync Method
,此方法的第一个参数prefix
可用于列出以prefix
开头的blob名称,例如{{1 }}以前缀abc.txt
开头。
因此,假设容器中的这些blob名称以a
,a-z
,A-Z
或其他有效字符或您在容器中已知的这些前缀词开头,则可以同时进行在多线程中列出这些不同前缀词的blob名称,以减少通过0-9
链接到下一个列表所花费的时间。
同时,如果您通过有序的前缀词获得多线程的响应,则最终的合并列表将进行排序,而无需其他排序操作。
希望有帮助。