代码之家  ›  专栏  ›  技术社区  ›  pencilslate

IQueryable Count方法的执行时间较长

  •  1
  • pencilslate  · 技术社区  · 15 年前

    在一个包含大约200个表和实体框架的数据库之上构建一个wcf,在构建wcf之后第一次执行登录需要花费大量时间(大约2分钟)。

    进入代码后,发现iqueryable.Count方法是罪魁祸首。

    这仅在构建WCF代码后的第一次发生。Count方法的连续执行速度与预期的一样快。

    原因可能是什么?实体是否在重建代码后进行某种类型的后台缓存?

    请分享你的想法!

    更新:

    @克雷格:谢谢你的预生成视图 link

    而且,这个 link 对英孚有很多绩效改进建议

    另外,检查ef的延迟加载 library .

    2 回复  |  直到 15 年前
        1
  •  5
  •   Michael La Voie Frederik Gheysels    15 年前

    这是一个已知的问题 resolved with .NET 4.0 .

    首次运行基于Web的应用程序时,必须缓存代码。从那时起,它全速运行。本文展示了通过在第一个用户访问服务之前预运行代码来避免这种初始速度减慢的当前方法。

        2
  •  3
  •   Craig Stuntz    15 年前

    跛脚鸭的回答是有帮助的(投了赞成票),但它没有讲完整的故事。第一次执行实体框架查询时,会发生一些事情。一种是视图生成,其中SQL是为常见查询(如加载实体集和加载单个实体)编译的。 But view generation can also be done at compile time 这就省去了第一个不走运的人运行查询这个步骤的性能开销。每当初始化新的ObjectContext时,都会重复此步骤,因此在编译时生成视图的小开销在运行时会有很大的回报。第二个问题是将iqueryable编译为规范的命令树,可以使用 CompiledQuery .您可能面临这些问题中的一个或两个,因此在将其作为.NET 3.5 SP 1问题注销之前,值得检查一下。