我正在使用Microsoft Azure,我正在尝试找出我桌面上的所有实体。不幸的是,我不知道这些实体的细节。我通读了http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-tables/,看来大多数实体都知道它们的具体细节。例如,他们知道这将是一个人。
有没有办法在不知道具体细节的情况下浏览我桌子上的所有实体?
我想要这样做的原因是因为我最终想知道我的表使用了多少内存,我假设我首先需要通过每个实体来查找它使用了多少内存。这是我到目前为止的代码:
static double CalculateTableMemoryUsage()
{
double memory = 0;
try
{
var storageAccount = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse("UseDevelopmentStorage=true");
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference("mytable");
table.CreateIfNotExists();
//I've successfully created the table. Any idea how I can look
// through the entity(s) of that table though?
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
return memory;
}
答案 0 :(得分:1)
有没有办法通过我的桌子的所有实体没有 了解他们的具体情况?
是。存储客户端库有一个名为DynamicTableEntity
的东西,因此您可以从表中获取DynamicTableEntity
的实体。顾名思义,在动态表实体的情况下,您实际上不需要知道模式。这是一个示例代码:
static void ListAllEntities()
{
var storageAccount = new CloudStorageAccount(new StorageCredentials(StorageAccount, StorageAccountKey), true);
var tableClient = storageAccount.CreateCloudTableClient();
var table = tableClient.GetTableReference("mytable");
List<DynamicTableEntity> entities = new List<DynamicTableEntity>();
TableContinuationToken token = null;
do
{
var result = table.ExecuteQuerySegmented(new TableQuery(), token);
token = result.ContinuationToken;
entities.AddRange(result.Results);
} while (token != null);
Console.WriteLine("Total Entities Fetched: " + entities.Count);
}
要计算实体的大小,您可能会发现此博文有用:http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/30/how-the-size-of-an-entity-is-caclulated-in-windows-azure-table-storage.aspx