【问题标题】:IQueryable Count method takes longer to executeIQueryable Count 方法需要更长的时间来执行
【发布时间】:2009-09-15 20:32:13
【问题描述】:

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

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

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

可能是什么原因?实体在重建代码后是否在做某种后台缓存?

请分享你的想法!

更新:

@Craig:感谢link的预生成视图

另外,这个link 对 EF 有很多性能改进建议

另外,请查看 EF library 的延迟加载。

【问题讨论】:

    标签: c# linq wcf entity-framework iqueryable


    【解决方案1】:

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

    当您第一次运行基于 Web 的应用程序时,必须缓存代码。从那时起,它全速运行。本文介绍了通过在您的第一个用户点击服务之前预运行代码来避免这种初始速度下降的当前方法。

    【讨论】:

    • @TLD:感谢您的链接!我希望这能解决我面临的实体相关问题。
    【解决方案2】:

    跛脚鸭的回答很有帮助(投票赞成),但它并不能说明全部情况。第一次执行 Entity Framework 查询时,会发生几件事。一种是视图生成,其中为常见查询编译 SQL,例如加载实体集和加载单个实体。 But view generation can also be done at compile time,它保存了第一个运行查询的不幸的人这一步的性能开销。每当初始化新的 ObjectContext 时都会重复此步骤,因此在编译时生成视图的小开销在运行时得到了很大的回报。第二个是将 IQueryable 编译成规范的命令树,可以使用 CompiledQuery 进行优化。您可能会遇到这些问题中的一个或两个,因此在将其作为 .NET 3.5 SP 1 问题注销之前,值得一试。

    【讨论】:

      猜你喜欢
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 2021-07-23
      • 2020-11-23
      • 1970-01-01
      • 2020-08-28
      相关资源
      最近更新 更多