【问题标题】:Is Azure CloudTable thread-safe?Azure CloudTable 是线程安全的吗?
【发布时间】:2012-11-06 07:58:24
【问题描述】:

我正在使用 Storage SDK 2.0 从不同的线程(ASP.NET 应用程序)写入 Azure 表存储。

CloudTable 对象是否线程安全?是否可以只初始化一次 CloudStorageAccount、CloudTableClient 和 CloudTable(例如,在静态构造函数中),然后在不同的线程中使用它们?

还是每次从空白处创建所有 CloudStorageAccount、CloudTableClient 和 CloudTable 对象会更好(如 this article 中所示)?它会以任何方式影响性能吗?

每次对表执行操作时获取 CloudTable 实例的首选方法是什么?

【问题讨论】:

标签: .net azure azure-storage azure-table-storage


【解决方案1】:

CloudStorageAccount

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

CloudTableClient

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

【讨论】:

  • 那么,提出表请求的首选方式是什么?每次都创建所有对象?
  • 我认为这取决于应用程序的目标/设计会有很大的不同,您可以选择重新创建和/或通过锁定使其线程安全。每个都有它的优点和缺点。我怀疑是否有一个万能的规则(但我曾经是一名顾问:-))
【解决方案2】:
  1. 很遗憾,它们不是线程安全的
  2. 幸运的是,这根本不重要: 通信是基于 HTTP 的,这意味着没有重用连接,并且每次应用程序只创建一个新的 HTTP 连接。所以只需重新创建每个线程的所有内容。而且我什至在一个线程中进行了测试,为每个查询重新创建所有内容只需要花费更多。

【讨论】:

  • 请注意,如果您过多地使用客户端而没有给 GC 清理连接的机会,您将用完套接字。
猜你喜欢
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 2015-04-18
  • 2011-10-07
  • 2012-03-02
  • 2011-10-28
相关资源
最近更新 更多