【发布时间】:2012-12-02 21:41:34
【问题描述】:
我在上下文(内存)中有实体,因为我使用 Include()s 加载了它们。
我有大约 25 个实体 (tph),我正在对每个实体运行以下查询:
actTph.TrainingProgramHistory_ConditionAndLoadParameter.Where(x => x.Level == 10).Select(x => x.ConditionAndLoadParameter).ToArray();
TrainingProgramHistory_ConditionAndLoadParameter 和 TrainingProgramHistory_ConditionAndLoadParameter.ConditionAndLoadParameters 都在内存中,因为执行这些查询时,SQL-profile 不会记录任何内容。
每个 TPH 大约有 20 个 TrainingProgramHistory_ConditionAndLoadParameter 相关实体。
运行此查询 25 次(在我的 25 个 TPH 实体上)大约需要 3 秒!
如果我重构这个:
List<ConditionAndLoadParameter> measuredCalps = new List<ConditionAndLoadParameter>();
foreach (TrainingProgramHistory_ConditionAndLoadParameter tphCalp in actTph.TrainingProgramHistory_ConditionAndLoadParameter)
{
if (tphCalp.Level == 10)
{
measuredCalps.Add(tphCalp.ConditionAndLoadParameter);
}
}
然后它在 100 毫秒左右运行。
对于内存中的对象,Linq to Entities 怎么这么慢?我做错了什么?
【问题讨论】:
-
我看到您在这些查询中查询不同的对象 - 第一种情况是
tph,第二种情况是actTph -
它们是一样的,我编辑了我的原始帖子。
标签: .net linq entity-framework linq-to-entities