我正在使用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个实体。请建议代码是否有改进的余地以提高性能?
答案 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,你可以准确地看到正在发出的请求,任何响应(以及错误)以及正在制作的请求数量。