8

我的上下文中有大约 300 个 DbSet,应用程序加载后的第一个查询(索引字段上的 FirstOrDefault() )需要大约 40 秒。

为了改进这一点,我尝试在此处使用 T4 模板在 EF 4.3.1 Code First 中使用预生成的视图:

http://blog.3d-logic.com/2012/06/13/entity-framework-codefirst-view-generation-templates-on-visual-studio-code-gallery/

我编译它,但我没有看到性能差异。我希望/假设它会帮助我正在经历痛苦的​​缓慢启动,但没有运气。

它应该有帮助吗?如果不是,那么预生成的视图到底是做什么用的?而且,我做些什么来缩短启动时间吗?至少可以说,拆分我的上下文是痛苦的。

4

2 回答 2

5

某些 ORM 像 NHibernate 和 EF 启动速度很慢。我不想尝试“修复”这种缓慢,而是通过确保 IIS 在应用程序池启动时触发此代码来消除问题。为此,您必须将 IIS 配置为自动启动您的应用程序池。此解决方案仅适用于 .NET 4 和 IIS7.5 及更高版本。

您想实现一个类,通过将 serviceAutoStartProviders 节点添加到您的 web.config 并为您的应用程序应用程序池设置 startMode="AlwaysRunning" 来IProcessHostPreloadClient加载ObjectContext并配置您的应用程序以使用它。

详情请参阅Scott Gu 的博客

于 2012-07-21T16:29:58.800 回答
5

事实证明,它实际上似乎是在第一个引用实体所在的程序集中搜索预生成的视图,而不是在 DbContext 所在的程序集中。在此处查看更多讨论:http: //blog.3d-logic.com/2012/06/13/entity-framework-codefirst-view-generation-templates-on-visual-studio-code-gallery/#comment-76

为了解决这个问题,我创建了一个新实体并将其放入上下文的程序集中,并将其列为第一个 DbSet。现在它捡起来了,并且运行良好(除了这很荒谬)。

于 2012-08-21T18:34:43.030 回答