【问题标题】:Entity Framework Query Slow for Small Result Set小型结果集的实体框架查询慢
【发布时间】: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


【解决方案1】:

这很难回答,因为有很多东西会影响,你的网络,你的 sqlserver 或 Windows 服务器中的其他请求的数量,你的模型,......

尽管是最新版本,但生成查询的质量和实体框架的性能已经有了很大的提高,在速度方面与其他版本相差甚远。有一些性能注意事项你可以看看https://msdn.microsoft.com/en-us/data/hh949853.aspx

速度很重要,3 秒对你来说太多了,可能我不会使用 Entity Framework 来检索这么多行,对我来说,当你只需要一些项目而不是数千个项目时,Entity Framework 非常棒,如果速度很重要的话。

为了提高速度,您可以使用许多其他 ORM,例如 Dapper,Stackoverflow 使用的一种是 pretty fast

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多