【问题标题】:How to reduce response time for first request如何减少第一次请求的响应时间
【发布时间】:2016-05-04 18:40:11
【问题描述】:

使用 Asp.net mvc5 代码优先 EF-6。我的应用程序数据模型足够大,因此 ObjectContext 有很多类需要访问数据库,然后处理这些类可能会延迟 Web 应用程序对第​​一个页面请求的响应。怎么办?如何提高应用响应?

注意:到目前为止,我知道当应用程序第一次创建 ObjectContext 对象时,实体框架会处理一组访问数据库所需的类。在这种情况下,如果您的数据模型很大,那么创建类可能会延迟 Web 应用程序对第​​一个页面请求的响应。想知道如何减少这种反应。

【问题讨论】:

  • “可能延迟”还是“延迟”?在您尝试解决它之前,您是否已经证明它实际上是一个问题?您知道上下文不会将模型中的所有数据都加载到其中,对吧?

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


【解决方案1】:

当 EF 启动时,它将运行您的数据库初始化程序。如果您删除默认为CreateDatabaseIfNotExists<TContext> 的初始化程序,您可以获得一点速度提升

Database.SetInitializer<YourContextType>(null); //System.Data.Entity namespace

通常人们将它放在 Global.asax 或 DbContext 的静态构造函数中

【讨论】:

    【解决方案2】:

    通常您会将任何启动逻辑保留在Application_Start 事件中的Global.asax 文件中。但是这在第一个用户访问之前不会触发,如果你正在做一些繁重的处理,这需要很多时间,这对第一个用户来说可能会变得非常令人沮丧。

    要克服这种情况,您可以将应用程序配置为自动启动并执行预加载逻辑。

    为此,您需要创建一个实现IProcessHostPreloadClient 接口的类,并在其中编写您的初始化逻辑 -

        public class ApplicationPreload : System.Web.Hosting.IProcessHostPreloadClient 
        {
            public void Preload(string[] parameters) 
            {
                    // Write initialization and loading logic here
             }
        } 
    

    接下来您需要在applicationHost.config (C:\Windows\System32\inetsrv\config\applicationHost.config) 中注册相关信息,方法是将startMode="AlwaysRunning" 属性添加到适当的@ 987654328@ -

    <applicationPools>
         <add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
    </applicationPools> 
    

    在同一个文件中注册自动启动提供程序 -

    <!-- Just AFTER closing the `sites` element AND AFTER `webLimits` tag -->
    <serviceAutoStartProviders>
        <add name="ApplicationPreload" type="WebApplication1.ApplicationPreload, WebApplication1" />
    </serviceAutoStartProviders>
    

    最后,在&lt;Sites&gt; 中,找到您的网站并指定提供商 -

    <sites>
        <site name="MySite" id="1">
            <application path="/" serviceAutoStartEnabled="true"
                                  serviceAutoStartProvider="ApplicationPreload" />
        </site>
    </sites>
    

    如果您不喜欢对applicationHost.config 进行更改,也可以通过 IIS 进行这些更改。

    更多细节可以在这里找到-http://weblogs.asp.net/scottgu/auto-start-asp-net-applications-vs-2010-and-net-4-0-series

    话虽如此,如果您的设计允许,您还应该尽量减少启动时所需的数据量,并仅加载相关的上下文数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 2018-08-08
      • 2021-03-27
      • 2016-05-02
      相关资源
      最近更新 更多