Windows azure表访问耗时太长

时间:2013-01-08 17:08:27

标签: c# performance azure azure-table-storage

我正在使用windows azure table存储。我的问题是,从表中访问给定用户的实体需要很长时间。我用来访问该表的代码如下:

   public CloudTableQuery<T> GetEntites(string username)  
   {
        try
        {
            CloudTableQuery<T> entries =
                (from e in ServiceContext.CreateQuery<T>(TableName)
                 where e.PartitionKey == username
                 select e).AsTableServiceQuery();

            return entries;
        }
        catch (Exception)
        { return null; }
    }

表中的总实体目前只有100个左右。例如:查询似乎需要40秒才能为给定用户返回25个实体。请建议代码是否有改进的余地以提高性能?

2 个答案:

答案 0 :(得分:1)

这里真正的问题是您返回的是查询而不是实体,并且您可能会为每个返回的实体(查询)再次执行查询。用以下内容定义您的实体:

public class UserEntity
{
    public string UserName { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

然后用以下内容定义表存储实体:

public class StoredUserEntity : TableServiceEntity
{
    public StoredUserEntity (string username)
    {
        this.PartitionKey = username;
        this.RowKey = Guid.NewGuid().ToString();
        this.Timestamp = DateTime.Now;
    }

    public string Email { get; set; }
    public string Name { get; set; }
}

然后您的查询应该实际返回UserEntities列表:

    public List<UserEntity> GetUserData(string username)
    {
        var q = _tableContext.CreateQuery<StoredUserEntity>(_tableName);
        return
            q.ToList().Select(x => new UserEntity {UserName = x.PartitionKey, Email = x.Email, Name = x.Name}).Where(x => x.UserName == username).ToList();
    }

答案 1 :(得分:0)

尝试使用Fiddler来查看正在发生的事情。可能是您正在经历一些可能减慢速度的重试。 API不会告诉你,但是对于Fiddler,你可以准确地看到正在发出的请求,任何响应(以及错误)以及正在制作的请求数量。