适当的CloudTableClient实例生命周期是什么?

19

我正在使用新版的WindowsAzure.Storage 2.0(可能不是相关信息),并且正在使用CloudTableClient实现数据访问。我看到的大多数示例都在ASP MVC控制器的ctor中创建了一个CloudTableClient实例(每个web请求实例化一次)。 这样做会有性能惩罚吗? 是否明智地以单例方式保持长时间运行的实例?

4个回答

14

嗨,看起来链接已经失效了。如果你有时间的话,可以在新文档中找到相应的信息。虽然我看到答案是在2013年的。 - Alex KeySmith
2
很奇怪,因为https://learn.microsoft.com/en-us/azure/azure-functions/manage-connections上的文档说:“为避免持有比必要更多的连接,请重复使用客户端实例,而不是在每个函数调用中创建新实例。我们建议为您可能编写函数的任何语言重复使用客户端连接。例如,如果您使用单个静态客户端,则.NET客户端(如HttpClient、DocumentClient和Azure Storage客户端)可以管理连接。”而CloudTableClient是“Azure Storage客户端”。 - NicoJuicy
1
公正地说,我的回答是6年前的。事情可能已经改变了。 - mfanto

3

3
我看到这个问题/答案,也想知道同样的事情。在查看SDK源代码(为了其他事情)时,我找到了一些有用的内容:
执行操作时,SDK使用HttpClientFactory,因此将重复使用单个静态实例的HttpClient。这很好,可以纠正不当实例化反模式,因此我们已经解决了使用单例的常见原因。
相关代码可在github上找到执行期间,并且HttpClient工厂是通过静态Lazy<T>实现的。
值得注意的是,存储 SDK不再支持表格(相反,Cosmos SDK 似乎提供它-我正在了解更多),因此这可能是一个无意义的观察。

0

查看CloudTableClient文档,我意识到它不是线程安全的。

此类型的任何公共静态成员(在Visual Basic中为Shared)都是线程安全的。任何实例成员不能保证是线程安全的。

因此,可能需要为每个请求实例化它。


是的,正如你回答的那样已经发布了。这样做没有性能损失。 - mfanto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接