【发布时间】:2015-06-12 16:58:31
【问题描述】:
所以我有下面的 EF 查询,它从一个平面表中返回大约 12,000 条记录。我使用仅选择必要字段(大约 15 个)的投影,然后将它们放入自定义类的列表中。这需要将近 3 秒,对于 12,000 条记录来说,这似乎是很长的时间。我尝试使用“未提交读取”将整个事物包装在事务范围中,并且还尝试使用“AsNoTracking()”。两者都没有任何区别。有人知道为什么这方面的表现会如此糟糕吗?
List<InfoModel> results = new List<InfoModel>();
using (InfoData data = new InfoData())
{
results = (from S in data.InfoRecords
select new
{
...bunch of entity fields...
}).AsEnumerable().Select(x => new InfoModel()
{
...bunch of model fields...
}).ToList();
}
【问题讨论】:
-
用 SqlServer 配置文件检查在 Sql Server 中查询需要多少时间,可能不仅仅是实体框架的问题。考虑读取 12.000 行,将它们放入内存和项目中,我认为时间不多。
-
无法回答的问题。捕捉产生的查询,看看普通的 sql 语句会发生什么。添加索引等
-
您运行查询多少次? EF 在第一次运行查询时会很慢。否则,如果它是一个平面表,它与原始 sql 相差不远。您要返回的字段有多大?重要的不是字段数,而是位数。
标签: c# sql entity-framework entity-framework-6