0

在我的表存储中,每个分区有 10.000 个元素。现在我想将整个分区加载到内存中。然而,这需要很长时间。我想知道我是否做错了什么,或者是否有办法更快地做到这一点。这是我的代码:

        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倍!怎么会这样?

4

2 回答 2

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 数据服务,这也会产生很大的影响。

于 2012-11-05T09:26:38.017 回答
1

此外,请确保您使用的是第二代 Azure 存储……如果您在支持它的数据中心,它本质上是“免费”升级。它使用 SSD 和升级的网络拓扑。

http://blogs.msdn.com/b/windowsazure/archive/2012/11/02/windows-azure-s-flat-network-storage-and-2012-scalability-targets.aspx

Microsoft 不会迁移您的帐户,只需重新创建它,您就可以“免费升级”到第二代 Azure 存储。

于 2012-11-05T13:30:31.543 回答