gpt4 book ai didi

c# - CloudBlobContainer.ListBlobs() - 使用 ToList() 降低交易成本

转载 作者:行者123 更新时间:2023-11-30 15:42:19 28 4
gpt4 key购买 nike

我有两个代码示例:

var container = new CloudBlobContainer("address");
var blobs = container.ListBlobs();
foreach (var blob in blobs)
{
//Do somthing
}

还有这个:

var container = new CloudBlobContainer("address");
var blobs = container.ListBlobs().ToList();
foreach (var blob in blobs)
{
//Do somthing
}

第二个示例会在“交易方面”带来任何优势吗?
每个示例中对 Blob 存储进行了多少事务?

最佳答案

编辑:此问题似乎涉及 blog post by Martin Ingvar Kofoed Jensen 。这个问题和那个问题之间的区别在于对 .Where(...).SingleOrDefault() 的调用。由于 LINQ 是惰性求值的,因此在 Container.ListBlobs() 阶段,它仍然是一个 IEnumerable,尚未调用 REST API(尚未检索到任何数据) )。一旦发生结果操作(例如 ToList()SingleOrDefault()),就会下载数据。由于在以下代码中循环内的惰性列表上调用了非惰性操作,因此每次循环迭代都会产生一个事务:

foreach (string filePath in allFilesInStartFolder)
{
string fileHash = GetFileHashFromCache(filePath, lastSync);

/* Checking for added files */
var blob = blobs.Where(b => b.LocalPath == filePath).SingleOrDefault();
// ^^ This is a non-lazy op on a lazy evalution, so it causes a REST call.
....
}
<小时/>

关于实际编写的问题:两个代码片段都会产生 single transaction (最多 5,000 个 blob)。我测试了 LinqPad 中的两个代码片段/Fiddler ,我只看到 single API call生成 blob 列表(用 {mystore} 替换我们的存储名称):

https://{mystore}.blob.core.windows.net/
{mystore}?restype=container&comp=list&delimiter=%2F&timeout=90

根据 List Blobs REST API 的文档,一次调用最多可以返回 5,000 个结果。因此,如果要列出整个容器中的所有 blob,最多需要 (# blobs/5000) 个事务。

关于c# - CloudBlobContainer.ListBlobs() - 使用 ToList() 降低交易成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7636999/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com