19

我正在使用新的 WindowsAzure.Storage 2.0(可能不是相关信息),并且正在使用 CloudTableClient 实现数据访问。我见过的大多数示例都是在 ASP MVC 控制器的 ctor 中实例化 CloudTableClient(根据 Web 请求实例化)。这样做有任何性能损失吗?以单例样式保持长时间运行的实例是否明智?

4

4 回答 4

14

您需要为每个请求创建一个新的 CloudTableClient 实例。实例成员不是线程安全的,所以你不能共享一个单例。

于 2013-01-05T07:22:08.150 回答
3

我遇到了这个问题/答案,想知道同样的事情,并且在查看 SDK 的源代码(对于别的东西)时,我发现了一些有用的东西:

执行操作时,SDK 使用的是 HttpClientFactory,因此正在重用 HttpClient 的单个静态实例。这很好,并且纠正了不正确的实例化反模式,所以我们已经为我们整理了使用单例的常见原因。

相关代码可以在github上找到。 执行期间HttpClient工厂 是通过静态实现的Lazy<T>

值得注意的是,Storage SDK 不再支持 Table(相反,Cosmos SDK似乎提供了它——我正在学习更多),所以这可能是一个没有实际意义的观察。

于 2019-03-05T15:36:28.733 回答
2

我认为在 2020 年你应该重用。

https://azure.microsoft.com/en-us/blog/performance-tips-for-azure-documentdb-part-1-2/

于 2020-04-14T20:54:03.480 回答
0

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

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

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

于 2013-01-05T07:21:40.483 回答