EF预生成视图。如何确保EF使用这些视图

时间:2012-03-26 14:14:30

标签: asp.net-mvc-2 entity-framework-4

我的网站上有几个性能问题。 我正在使用asp.net mvc 2和Entity Framework 4.0。我买了一个Entity Framework Profiler来查看EF生成了哪种SQL请求。

例如,某些页面需要3到5秒才能打开。这对我的客户来说很重要。
为了查看它是否是由EF生成的SQL的性能问题,我使用了我的探查器并在Sql Management Studio中复制/粘贴生成的SQL来查看执行计划和sql统计信息。结果显示不到一秒钟。

现在我删除了SQL查询,我怀疑EF在建立查询步骤。
我按照msdn一步一步预先生成我的视图。我没有看到任何性能提升。

如何确保我的查询使用这些预先生成的视图?
我有什么办法可以提高我网站的性能吗?

谢谢

1 个答案:

答案 0 :(得分:1)

首先,请记住,预编译的查询在第一次运行时仍然需要同样长的时间(实际上稍微长一点),因为查询是在第一次调用时编译的。在第一次调用之后,您应该会看到单个查询的性能显着提高。

但是,您会发现所有性能问题的最佳答案是:弄清楚最先花费的时间是什么,然后在该领域进行改进。在你运行一个分析器并知道系统阻塞的地方之前,你花在试图加速的任何时候都可能会被浪费掉。

一旦你确定了花费最多时间的东西,就有很多可能的技术可以用来加快速度:

  1. 缓存不经常更改的数据
  2. 重组您的数据访问,以便您在更少的往返次数中提取所需的数据。
  3. 确保在执行数据库查询时不会提取超出所需数据的数据。
  4. 购买更好的硬件。
  5. ......和其他许多人
  6. 最后一点:在实体框架5中,他们计划实现自动查询缓存,这将使预编译查询几乎无用。因此,我建议您尽可能确保自己能够获得显着改善。