我的日志存储库中有以下两种方法。
public IEnumerable<Log> GetAll()
{
var db = new CasLogEntities();
return db.Logs;
}
public DbSet<Log> GetAllSet()
{
var db = new CasLogEntities();
return db.Logs;
}
唯一的区别是一个返回一个 IEnumerable 的 Log,另一个返回一个 DbSet 的 Log。
在我的资产控制器中,我有以下代码
var allLogs = _logRepo.GetAllSet();
var Logs = (from log in allLogs
group log by log.DeviceId
into l
select new {DeviceId = l.Key, TimeStamp = l.Max(s => s.TimeStamp)}).ToList();
现在的问题是,我在 group by 语句中获得了巨大的性能差异,具体取决于我调用的回购方法之一。
- 返回 DbSet 的 getAllSet 快如闪电,
- GetAll 返回 IEnumerable 真的很慢。
任何人都可以解释这一点。我在想 DbSet 到 GetAll 中的 IEnumerable 的转换导致查询执行,因此我在大量内存集上进行分组。由于 GetAllSet 将查询执行推迟到“ToList()”,因此在服务器上按组工作。
它是否正确?有没有另一种方式来解释这一点?
我更希望 GetAll 返回 IEnumerable,因为我更熟悉它并且它更易于测试。