- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想从 Azure Blob 存储下载一个可能尚不存在的文件。我正在寻找最可靠、最高效的方法来处理这个问题。为此,我发现了两个都有效的选项:
选项 1:使用 ExistsAsync()
持续时间:大约需要 1000~1100 毫秒才能完成。
if (await blockBlob.ExistsAsync())
{
await blockBlob.DownloadToStreamAsync(ms);
return ms;
}
else
{
throw new FileNotFoundException();
}
选项 2:捕获异常
持续时间:每次至少需要+1600ms。
try
{
await blockBlob.DownloadToStreamAsync(ms);
return ms;
}
catch (StorageException e)
{
// note: there is no 'StorageErrorCodeStrings.BlobNotFound'
if (e.RequestInformation.ErrorCode == "BlobNotFound")
throw new FileNotFoundException();
throw;
}
这些指标是通过 webapi 上的简单 API 调用来完成的,该调用使用上述函数并返回适当的消息。我在这里通过 Postman 手动测试了端到端场景。当然,这种方法有一些开销。但总的来说,ExistsAsync() 操作似乎节省了至少 500 毫秒。至少在我的本地机器上,同时进行调试。这有点值得注意,因为 ExistsAsync() 上的 DoesServiceRequest
属性似乎表明这是另一个需要进行的昂贵的 http 调用。
此外,ExistsAsync API docs不要谈论它的用法或任何副作用。
基于穷人的测试,一个直率的结论将导致我选择No。 1、因为:
但这是我的实际问题:这是对 ExistsAsync() 用法的正确解释吗?
例如。它存在的“原因”是不是比简单地捕获未找到的异常更有效,特别是出于性能原因?
谢谢!
最佳答案
But here is my actual question: is this the correct interpration of the usage of ExistsAsync()?
您可以轻松查看the implementation你自己。
ExistsAsync()
只是一个 http 调用的包装器,如果 blob 不存在,则返回 http 未找到状态并返回 false
在这种情况下。 True
否则。
我会说选择 ExistsAsync,因为它似乎是最理想的方法,特别是如果您认为有时 blob 不存在的话。 DownloadToStreamAsync
有more work to do将异常包装在 StorageException
中也许还可以做一些更多的清理工作。
I would assume the ExistsAsync() operation is there for this exact reason
考虑一下:有时您只想知道给定的 blob 是否存在,而不对其内容感兴趣。例如,警告上传时某些内容将被覆盖。在这种情况下使用 ExistsAsync
是一个很好的用例,因为使用 DownloadToStreamAsync
仅检查存在性将是昂贵的,因为如果 blob 存在,它将下载内容。
关于c# - 就性能而言,使用 CloudBlob.ExistsAsync 与 catch StorageException.BlobNotFound 比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48869187/
这个问题已经有答案了: Differences between Azure Block Blob and Page Blob? (6 个回答) 已关闭 1 年前。 看起来像CloudBlob有 3 个
我使用 SQL Azure 来存储 Blob 元数据,并使用 Azure Blob 存储来存储实际的 Blob。 Blob 创建/删除是通过在环境 TransactionScope 中登记这些操作来实
任务 使用原始文件名将文件上传到 Azure Blob Storage,并将文件名作为 meta-data 分配给 CloudBlob 问题 元数据中不允许使用这些字符,但可以接受作为blob名称:
以下单元测试失败: [TestMethod] public void Add_file_to_blob_and_retrieve_it() { var blobName = Guid.NewG
使用 Windows Azure 存储客户端库,CloudBlob.OpenRead() 方法仅读取 4 mb 的数据。如何使用 OpenRead 方法读取完整流。 CloudBlob blob =
使用 Windows Azure 存储客户端库,CloudBlob.OpenRead() 方法仅读取 4 mb 的数据。如何使用 OpenRead 方法读取完整流。 CloudBlob blob =
我想将用户上传到我的网站的文件保存到我的 Azure Blob 中,并且我正在使用 CloudBlob.UploadFromStream 方法来执行此操作,但我想确保在做更多工作之前文件已顺利完成保存
我正在尝试从我的 Azure 存储帐户下载二进制文件。最初,我使用 CloudBlob.DownloadToFileAsync(),它允许我提供 IProgress 参数并获取传输进度更新。 但是,在
我一定在这里遗漏了一些明显的东西,但我发现自己无法进行我认为合法的向上转换。我正在尝试将数据上传到 Azure 中的 Blob 存储,并且想使用方法 CloudBlob.UploadText(stri
我正在尝试通过流从 cloudBlob 下载文件。我引用这篇文章CloudBlob 这是下载 blob 的代码 public Stream DownloadBlobAsStream(CloudStor
编辑:扩展代码示例以显示如何加载 destinationBlob。 我们正在利用直接帐户到帐户复制来传输一组 blob。由于属性在进程启动时会被覆盖,因此我们会定期监视目标 blob,然后在复制完成时
编辑:扩展代码示例以显示如何加载 destinationBlob。 我们正在利用直接帐户到帐户复制来传输一组 blob。由于属性在进程启动时会被覆盖,因此我们会定期监视目标 blob,然后在复制完成时
几个小时以来,我一直在尝试在使用 Azure SDK 创建的 blob 上设置一些元数据。我使用 BeginUploadFromStream() 异步上传数据,一切顺利。上传完成后,我可以使用 Blo
我正在尝试获取有关 Azure blob(上次修改的 UTC 日期时间)的一些信息。此信息存储在 CloudBlob.Properties.LastModifiedUtc 属性中。 如果我使用方法 G
我有以下代码,该代码使用已弃用的 Microsoft.WindowsAzure.StorageClient 并已升级到 Microsoft.WindowsAzure.Storage,现在我无法使用下面
我很确定这是 Windows Azure SDK 的限制(使用最新的 1.4),但必须有一种方法可以解决这个问题,而无需使用手动 REST... 代码: CloudBlob blob = contai
所以我一直在浏览https://learn.microsoft.com/en-us/learn/modules/copy-blobs-from-command-line-and-code/7-move
我想创建端点来传输存储在 azure CloudBlob 中的视频流。这是我的代码片段: public async Task GetVideo(string videoId) {
我似乎收到了 403: HTTP/1.1 403 Server failed to authenticate the request. Make sure the value of Authoriza
我似乎收到了 403: HTTP/1.1 403 Server failed to authenticate the request. Make sure the value of Authoriza
我是一名优秀的程序员,十分优秀!