是否可以长时间保持对Azure CloudTable的引用?

时间:2014-03-27 02:29:34

标签: c# azure azure-table-storage

我有一个方法,在编写或查询表存储之前,我们调用它来获取对CloudTable的引用。

private static CloudTable GetCloudTable() {
   var storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
   var tableClient = storageAccount.CreateCloudTableClient();
   var table = tableClient.GetTableReference("TheTableName");
   return table;
}

可以将它放在我的表处理类的构造函数中吗?在每个表插入上运行此代码是一个额外的开销吗?在我看来,我正在增加我正在运行的交易数量。

1 个答案:

答案 0 :(得分:11)

您的代码段不会将任何消息发送到Storage Service。仅当您使用“table”变量实际创建,查询或对存储执行任何CRUD操作时,才会发送实际消息。所以答案是“我是否通过在每个表插入上运行此代码来增加事务数量?”是的。

也就是说,CloudStorageAccount.Parse和CloudConfigurationManager.GetSetting(代码片段中的第一行)确实会产生一些开销(字符串解析和配置项检索)。所以我建议你只执行一次,然后在每个表操作中重用它们的结果(是的,把它放在构造函数中是一个选项)。

但是,CreateCloudTableClient()返回的CloudTableClient对象不保证是线程安全的。因此,如果线程在你的环境中是一个问题(即你是从多线程使用同一个类的实例),我建议你每次需要时创建一个新的CloudTableClient实例。