实体框架DateTime更新速度极慢

时间:2012-06-01 16:36:38

标签: c# wcf entity-framework datetime entity-framework-4

我目前的情况是实体框架:

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)。

1 个答案:

答案 0 :(得分:0)

只是要指出,你的sql命令只有一个查询,而你的EF命令是两个查询(获取数据,然后保存它),所以你可以看到2倍的差异。

此外,您可能会发现通过ID查询而不是即席查询可以获得更好的性能。假设SessionId是主键查找。

UserSession session = dataContext.UserSessions.Find(SessionId);