2012-11-05 148 views
0

在我的表存储中,每个分区有10.000个元素。现在我想将整个分区加载到内存中。但是,这需要很长时间。我想知道我是否做错了什么,或者如果有办法做得更快。这里是我的代码:从Azure表存储获取分区

 public List<T> GetPartition<T>(string partitionKey) where T : TableServiceEntity 
     { 
      CloudTableQuery<T> partitionQuery = (from e in _context.CreateQuery<T>(TableName) 
               where e.PartitionKey == partitionKey 
               select e).AsTableServiceQuery<T>(); 

      return partitionQuery.ToList(); 
     } 

难道这是应该做或者是它们的任何等同于批量插入再次获得元素出表的方式吗?

非常感谢, 基督教

编辑

我们所有的数据Blob存储也可以。这意味着,一个分区被完全序列化为byte []并保存在一个blob中。当我从blob存储中检索并反序列化它时,它比从表格中获取更快。快10倍!怎么会这样?

回答

3

在你的情况我想关闭更改跟踪可以有所作为:

context.MergeOption = MergeOption.NoTracking; 

看看MSDN上的其他可能的改进:.NET and ADO.NET Data Service Performance Tips for Windows Azure Tables

编辑:要回答你的问题,为什么一个blob存储中的大文件速度更快,您必须知道单个请求中可以获得的最大记录数量为1000个项目。这意味着,要获取10.000项,您需要在blob存储上执行10次请求,而不是1次单个请求。此外,在使用Blob存储时,您不会通过WCF数据服务,这也会产生重大影响。

+0

谢谢,我现在将测试这个 – Christian

+0

嗯,不幸的是这并没有给出任何更好的性能 – Christian

+0

所以在我的情况下,我需要批量获得10.000元素,使用Blob存储会快很多? – Christian