在第一次请求时,Asp.net Core 2.2变慢

Gau*_*san 7 c#-3.0 typescript2.0 asp.net-core-2.0 angular

第一个请求要花时间才能达到服务器API方法,因为它会在启动任务中预先构建服务,有人可以建议我减少在IIS中发布后第一个请求的初始延迟。

 // This method gets called by the runtime. 
            // Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
               services.AddTransient<IContactService, ContactService>();
               services.AddTransient<IPersonService, PersonService>();
               services.AddTransient<IDashboardService, DashboardService>();
               services.AddTransient<IEmployeeService, EmployeeService>();
               services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

                // In production, the React files will be served from this directory
                services.AddSpaStaticFiles(configuration =>
                {
                    configuration.RootPath = "ClientApp/build";
                });
            }
Run Code Online (Sandbox Code Playgroud)

需要注入100多个服务,这需要花费一些时间进行预建。

Jef*_*eff 6

这可能是您的 IIS 配置存在问题,因为应用程序池是从不活动状态回收的。

如果您在“高级设置”下设置了应用程序池的启动模式,那么无论您何时调用它,它都应该可以使用,除非您恰好在回收发生时调用它。

这可以通过以下方式找到:

  1. 打开IIS
  2. 在服务器根目录下找到应用程序池
  3. 右键单击要更改的特定应用程序池
  4. 选择高级设置
  5. 将启动模式更改为AlwaysRunning

高级设置启动模式

对于后一期的回收,只要需要(每 29 小时)一次,您可以安排回收在设定的时间进行,以免造成干扰。在同一高级设置屏幕上:

  1. 找到“回收”标题
  2. Change Regular Time Interval (minutes)至 0
  3. 展开Specific Times并单击...显示 TimeSpan[] Array 的位置。
  4. 在新对话框中,选择工作时间之外的静态刷新时间。

在此输入图像描述

  • 问题提到“发布后”。更改这些 IIS 设置不会有利于部署后的初始请求性能。 (2认同)