ASP.NET核心:开发环境变量

时间:2016-09-01 17:14:14

标签: c# visual-studio-2015 asp.net-core asp.net-core-mvc .net-core

我的ASP.NET核心应用程序从一天到另一天的调试速度非常慢。加载单个站点需要花费90秒,在第一次请求之前最多加载5-6秒。我没有做任何可以解释这个的改变。我尝试了不同的东西来找出原因。似乎减速过程始于请求。

我发现只有在调试项目选项中将 ENVIRONMENT 变量设置为开发时才会出现这种情况。为了进行测试,我将其设置为 Production ,令人惊讶的是我的APP在此问题之前非常快。我只能从检查变量的示例中找到预生成的部分:

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或框架的其他部分在内部检查变量并在开发环境中做一些需要很多时间的理论来解释这一点。

目前,使用生产环境是一种可接受的解决方法。但是从长远来看,我想使用这个漂亮的变量来做一些只在开发中做的事情,就像用一些测试数据填充数据库一样。在开发模式下出现这种性能问题的原因是什么?

网络服务器的输出说:

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

您可以看到它不是启动问题,因为它花费了大部分时间来执行操作。但是家庭控制器的动作只提供简单的Razor视图,至少在那里创建了数据库连接。

要了解这是多么缓慢,这里是环境=生产

的相同请求的示例
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

1 个答案:

答案 0 :(得分:3)

我发现这与ASP.NET Core没有直接关系。而是在选项>的调试设置中启用了微软符号服务器。调试>符号:

enter image description here

这使得Visual Studio可以加载所有微软程序集的符号。似乎符号缓存不是持久的,因为它存储在临时文件夹中。因此VS会不时重新加载它们,这会导致明显的性能问题。我禁用它们,现在开发区几乎和生产一样快。

相关问题