重用CloudBlobClient对象

时间:2012-03-29 21:52:00

标签: azure azure-storage azure-storage-blobs

我有这两个对象用于Azure Blob存储访问,并希望在ASP.NET MVC应用程序中使用它们。

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("Deesd");

我的问题是:我可以在所有应用程序请求中重用相同的对象实例,还是应该在每个方法中实例化一个新对象?

4 个答案:

答案 0 :(得分:9)

您可以重用实例,只是不要同时从多个线程访问同一个实例,因为它不是线程安全的。

更新2019年4月(7年后)

注意:您应该始终查阅最新的SDK文档。

是的,现在(至少在此更新时)可以安全地在较新版本的SDK中以线程安全的方式使用CloudBlobClient和其他对象。实际上,您发现的一些文档鼓励它,但技术上仍然无法保证在设计上保持这种方式(例如,SDK的未来主要版本可能会重新考虑这一点)。

像往常一样,您应该为应用程序级逻辑提供抽象,以尽可能地隐藏客户端及其生命周期。然后你让抽象担心终身管理。也许今天使用的是一个简单的静态实例,明天可能会使用池化,但至少如果出现问题,大部分应用程序逻辑都会从中抽象出来。

答案 1 :(得分:4)

您可以重复使用它。据我所知,除了初始化之外,它不包含任何状态。

答案 2 :(得分:1)

This link明确指出,您在请求中重用相同的客户端,因为这些客户端管理连接,因此能够优化基础调用以与服务建立连接。

This is the direct link to Microsoft Documentation说同样的话

Cosmos Db advice的相似之处在于,在应用程序的生命周期中建议使用单例模式

答案 3 :(得分:0)

取决于客户端版本,我在这里从 Microsoft 的某个人那里找到了答案: https://github.com/Azure/azure-storage-net/issues/732#issuecomment-745749919

<块引用>

至于使 CloudBlobClient 成为单例。可以尝试这样做并取得一些成功。但是,请注意 V11 和之前的类型(如 CloudBlobClient 和 CloudBlob)是有状态的。它们可能具有可变属性,并且某些 API 可能会改变状态。因此,我建议在尝试此操作时要谨慎。 我强烈建议改用 V12,其中所有客户端都设计为无状态,可以在任何生命周期内安全使用