我正在使用新的WindowsAzure.Storage 2.0(可能不是一个重要的信息),我正在使用CloudTableClient实现数据访问。我见过的大多数样本都是在ASP MVC控制器的存储器中实现CloudTableClient(根据Web请求实例化)。 这样做有任何性能损失吗? 以单例样式保持长时间运行的实例是明智的吗?
答案 0 :(得分:11)
您需要为每个请求创建一个新的CloudTableClient实例。 Instance members are not thread-safe,因此您无法共享单身人士。
答案 1 :(得分:1)
我认为在2020年您应该重复使用。
https://azure.microsoft.com/en-us/blog/performance-tips-for-azure-documentdb-part-1-2/
答案 2 :(得分:0)
查看CloudTableClient文档,我意识到它不是线程安全的。
此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的。不保证任何实例成员都是线程安全的。
因此,可能需要为每个请求实例化。
答案 3 :(得分:0)
我遇到了这个问题/答案,想知道同样的事情,并且在查看SDK的源代码时(出于其他目的),我遇到了一些有用的东西:
执行操作时,SDK使用的是HttpClientFactory,因此将重用HttpClient的单个静态实例。这样做很好,并且可以纠正Improper Instantiation antipattern,因此使用单例的常见原因已经为我们解决了。
相关代码可以在github上找到
During Execution
而HttpClient factory是通过静态Lazy<T>
值得注意的是Storage SDK doesn't support Table anymore(实际上是Cosmos SDK出现了来提供它-我正在学习更多内容),因此这可能是一个没有实际意义的观察。