1

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

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

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

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

请分享你的想法!

更新:

@Craig:感谢预生成视图链接

此外,此链接对 EF 有很多性能改进建议

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

4

2 回答 2

5

这是一个已知问题,将通过.NET 4.0 解决

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

于 2009-09-15T20:36:48.167 回答
3

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

于 2009-09-16T13:24:11.410 回答