我的ASP.NET Core应用程序在一天内从调试开始变得非常缓慢。加载单个网站需要长达90秒的时间,在第一次请求时最多只需5-6秒即可加载。我没有做出任何可以解释这种情况的更改。我尝试了不同的方法来找出原因。看起来,减速过程始于请求。
我发现,只有在将项目选项下的环境变量设置为开发时,才会出现这种情况。为测试目的,我将其设置为生产,令人惊讶的是我的应用程序像之前一样快速。我只能找到预生成的示例部分,其中检查了变量。
我发现,只有在将项目选项下的环境变量设置为开发时,才会出现这种情况。为测试目的,我将其设置为生产,令人惊讶的是我的应用程序像之前一样快速。我只能找到预生成的示例部分,其中检查了变量。
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
DebugData.InsertIfMissing(); // This is from me and inserts some testdata in the db
} else {
app.UseExceptionHandler("/Home/Error");
}
尽管我将这些行代码注释掉了,但是在设置ENVIRONMENT=Development时,我的ASP.NET Core应用程序仍然非常缓慢。我不知道为什么。我只能用这个理论来解释:ASP.NET Core,EF Core或框架的其他部分在内部检查变量并执行某些需要很长时间的操作,当处于开发环境时。
目前使用生产环境是一个可以接受的解决方法。但从长远来看,我想使用这个不错的变量来做一些只有在开发中才需要的事情,比如填充数据库测试数据。在dev-mode中可能会出现性能问题的原因是什么?
Web服务器的输出如下:
Hosting environment: Development
Content root path: C:\Dev\MyApp
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET http://localhost:5000/
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
Executing action method MyApp.Controllers.HomeController.Index (MyApp) with arguments () - ModelState is Valid
info: Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ViewResultExecutor[1]
Executing ViewResult, running view at path /Views/Home/Index.cshtml.
info: Microsoft.Extensions.DependencyInjection.DataProtectionServices[0]
User profile is available. Using 'C:\Users\MyUserName\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
Executed action MyApp.Controllers.HomeController.Index (MyApp) in 84836.6896ms
正如您所见,这不是一个启动问题,因为执行操作需要大部分时间。 但是home-controller的操作仅提供了一个简单的Razor视图,至少没有在那里创建数据库连接。
为了看到这有多慢,这里有一个使用ENVIRONMENT = Production的相同请求示例。
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
Executed action MyApp.Controllers.HomeController.Index (MyApp) in 2728.3558ms
第二个请求,ASP.NET 已经初始化/缓存了大部分内容:
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
Executed action MyApp.Controllers.HomeController.Index (MyApp) in 19.3621ms
app.UseBrowserLink()
这一行代码,因此它应该已被禁用。但是这并没有解决问题。 - Lion