Yar*_*evi 4 c# azure azure-storage azure-storage-blobs
我有两个代码示例:
var container = new CloudBlobContainer("address");
var blobs = container.ListBlobs();
foreach (var blob in blobs)
{
//Do somthing
}
Run Code Online (Sandbox Code Playgroud)
和这个 :
var container = new CloudBlobContainer("address");
var blobs = container.ListBlobs().ToList();
foreach (var blob in blobs)
{
//Do somthing
}
Run Code Online (Sandbox Code Playgroud)
第二个例子会在“交易方面”提供任何优势吗?
在每个示例中,对 blob 存储进行了多少事务?
编辑:看来这个问题是参考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.
....
}
Run Code Online (Sandbox Code Playgroud)
关于实际编写的问题:两个代码片段都将导致单个事务(最多 5,000 个 blob)。我在LinqPad / Fiddler 中测试了两个代码片段,我只看到一个API 调用来生成 blob 列表(用 {mystore} 替换了我们的存储名称):
https://{mystore}.blob.core.windows.net/
{mystore}?restype=container&comp=list&delimiter=%2F&timeout=90
Run Code Online (Sandbox Code Playgroud)
根据List Blobs REST API的文档,一次调用最多可以返回 5,000 个结果。因此,如果要列出整个容器中的所有 blob,最多需要 (# blob / 5000) 个事务。
归档时间: |
|
查看次数: |
6614 次 |
最近记录: |