我目前的情况是实体框架:
using (TestEntities dataContext = DataContext)
{
UserSession session = dataContext.UserSessions.FirstOrDefault(userSession => userSession.Id == SessionId);
if (session != null)
{
session.LastAvailableDate = DateTime.Now;
dataContext.SaveChanges();
}
}
这一切都很完美,除了它与我期望的相比非常慢(每秒14次调用,100次迭代测试)。当我通过此命令手动更新此记录时:
dataContext.Database.ExecuteSqlCommand(String.Format("update UserSession set LastAvailableDate = '{0}' where Id = '{1}'", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffffff"), SessionId));
我每秒接到55个电话,这足够快。但是,当我不更新session.LastAvailableDate但我更新一个整数(例如session.UserId)或带有Entity Framework的字符串时,我每秒可以获得50次调用,这也足够快。只有datetime字段很慢。
因子4的差异是不可接受的,我想知道如何改进这一点,因为当我也可以使用实体框架时,我不喜欢使用直接SQL。
我正在使用Entity Framework 4.3.1(也尝试过4.1)。
答案 0 :(得分:0)
只是要指出,你的sql命令只有一个查询,而你的EF命令是两个查询(获取数据,然后保存它),所以你可以看到2倍的差异。
此外,您可能会发现通过ID查询而不是即席查询可以获得更好的性能。假设SessionId是主键查找。
UserSession session = dataContext.UserSessions.Find(SessionId);