我正在使用新的 WindowsAzure.Storage 2.0(可能不是相关信息),并且正在使用 CloudTableClient 实现数据访问。我见过的大多数示例都是在 ASP MVC 控制器的 ctor 中实例化 CloudTableClient(根据 Web 请求实例化)。这样做有任何性能损失吗?以单例样式保持长时间运行的实例是否明智?
4 回答
您需要为每个请求创建一个新的 CloudTableClient 实例。实例成员不是线程安全的,所以你不能共享一个单例。
我遇到了这个问题/答案,想知道同样的事情,并且在查看 SDK 的源代码(对于别的东西)时,我发现了一些有用的东西:
执行操作时,SDK 使用的是 HttpClientFactory,因此正在重用 HttpClient 的单个静态实例。这很好,并且纠正了不正确的实例化反模式,所以我们已经为我们整理了使用单例的常见原因。
相关代码可以在github上找到。
执行期间
,HttpClient工厂 是通过静态实现的Lazy<T>
值得注意的是,Storage SDK 不再支持 Table(相反,Cosmos SDK似乎提供了它——我正在学习更多),所以这可能是一个没有实际意义的观察。
我认为在 2020 年你应该重用。
https://azure.microsoft.com/en-us/blog/performance-tips-for-azure-documentdb-part-1-2/
查看CloudTableClient文档,我意识到它不是线程安全的。
此类型的任何公共静态(在 Visual Basic 中为 Shared)成员都是线程安全的。不保证任何实例成员都是线程安全的。
因此,可能需要为每个请求实例化它。