预生成 Entity Framework 视图
Pre-generating Entity Framework Views
我正在开发一个使用 Entity Framework 6.1.3 的 MVC 5 应用程序。我正在尝试通过预生成视图来优化第一次调用,这通常需要 1-4 秒。我明白为什么会这样,但我觉得我在某处错过了重要的一步。
我当前的测试 运行 使用 EF 将相同的函数五次从我的数据库中提取对象集合。当我 运行 在我的 edmx 中设置 'Embed in Output Directory' 时,我得到以下结果:
**
- 第一次 EF 调用:2617 毫秒
- 第二次 EF 调用:19 毫秒
- 第三次 EF 调用:19 毫秒
- 第四次 EF 调用:17 毫秒
- 第五次 EF 调用:20 毫秒
**
我预计会这样,因为 EF 正在生成本地视图以访问数据库...
当我切换到 'Copy to Output Directory' 时,仔细检查我的文件是否正在复制到 bin 文件夹并且我的连接字符串已更新,然后 运行 相同的测试我得到类似的结果:
**
- 第一次 EF 调用:2546 毫秒
- 第二次 EF 调用:19 毫秒
- 第三次 EF 调用:18 毫秒
- 第四次 EF 调用:18 毫秒
- 第五次 EF 调用:21 毫秒
**
第一次调用没有变化,是st运行ge。我添加了 EF Power Tools,右键单击我的 edmx => Entity Framework => 生成视图。为我的每个 tables/views 创建了一个带有字符串的 'Model1.View.cs' 文件,所以我觉得我走在正确的道路上。当我再次 运行 测试时,我得到了相同的结果。在新生成的 'Model1.View.cs' 文件的每个方法中放置一个断点表明它永远不会被命中。
我是不是漏掉了重要的一步?我如何告诉 EF 使用由 EF Power Tools 创建的文件,或者我如何使复制到输出目录像我在线阅读的那样工作?
据我所知,EF Power Tools 未更新为支持 EF6。如果您确定这是导致问题的视图生成,您可以使用视图生成 T4 template or the interactive pre-gegnerated views (yes, I am the creator of both). You can find more details on how to use the T4 template in this post. Interactive Pre-Generated views are described here.
但是,EF6 中的视图生成得到了极大改进,这只是较大模型或涉及复杂层次结构时的问题。我假设您看到的瓶颈不是由视图生成引起的,而是由模型构建引起的。看看this post by EF team that talks a little bit about improving startup performance by generating native images. You may also want to take a look at Performance Consideration。
我正在开发一个使用 Entity Framework 6.1.3 的 MVC 5 应用程序。我正在尝试通过预生成视图来优化第一次调用,这通常需要 1-4 秒。我明白为什么会这样,但我觉得我在某处错过了重要的一步。
我当前的测试 运行 使用 EF 将相同的函数五次从我的数据库中提取对象集合。当我 运行 在我的 edmx 中设置 'Embed in Output Directory' 时,我得到以下结果:
**
- 第一次 EF 调用:2617 毫秒
- 第二次 EF 调用:19 毫秒
- 第三次 EF 调用:19 毫秒
- 第四次 EF 调用:17 毫秒
- 第五次 EF 调用:20 毫秒
**
我预计会这样,因为 EF 正在生成本地视图以访问数据库...
当我切换到 'Copy to Output Directory' 时,仔细检查我的文件是否正在复制到 bin 文件夹并且我的连接字符串已更新,然后 运行 相同的测试我得到类似的结果:
**
- 第一次 EF 调用:2546 毫秒
- 第二次 EF 调用:19 毫秒
- 第三次 EF 调用:18 毫秒
- 第四次 EF 调用:18 毫秒
- 第五次 EF 调用:21 毫秒
**
第一次调用没有变化,是st运行ge。我添加了 EF Power Tools,右键单击我的 edmx => Entity Framework => 生成视图。为我的每个 tables/views 创建了一个带有字符串的 'Model1.View.cs' 文件,所以我觉得我走在正确的道路上。当我再次 运行 测试时,我得到了相同的结果。在新生成的 'Model1.View.cs' 文件的每个方法中放置一个断点表明它永远不会被命中。
我是不是漏掉了重要的一步?我如何告诉 EF 使用由 EF Power Tools 创建的文件,或者我如何使复制到输出目录像我在线阅读的那样工作?
据我所知,EF Power Tools 未更新为支持 EF6。如果您确定这是导致问题的视图生成,您可以使用视图生成 T4 template or the interactive pre-gegnerated views (yes, I am the creator of both). You can find more details on how to use the T4 template in this post. Interactive Pre-Generated views are described here.
但是,EF6 中的视图生成得到了极大改进,这只是较大模型或涉及复杂层次结构时的问题。我假设您看到的瓶颈不是由视图生成引起的,而是由模型构建引起的。看看this post by EF team that talks a little bit about improving startup performance by generating native images. You may also want to take a look at Performance Consideration。