1

我目前在使用实体框架时遇到这种情况:

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 而是使用 Entity Framework 更新整数(例如 session.UserId)或字符串时,我每秒会收到 50 个调用,这也足够快。只有日期时间字段非常慢。

因子 4 的差异是不可接受的,我想知道如何改进这一点,因为当我也可以使用实体框架时,我不喜欢使用直接 SQL。

我正在使用 Entity Framework 4.3.1(也尝试过 4.1)。

4

1 回答 1

0

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

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

UserSession session = dataContext.UserSessions.Find(SessionId);
于 2012-06-01T16:43:05.023 回答