1

ASP.NETコアアプリケーションは、ある日から別の日にデバッグすると非常に遅くなりました。単一のサイトをロードするまでに最大90秒かかっていました。最初のリクエストでは、最大5〜6秒前にロードされました。私はこれを説明できる変更を加えなかった。理由を知るためにさまざまなことを試みました。減速プロセスは要求から始まるようです。ASP.NET Core:開発環境変数のページロード時間が非常に遅い

私は、これは私が開発にデバッグの下でプロジェクトのオプションでENVIRONMENT変数を設定する場合のみであることが分かりました。テストのために私はそれをの生産に設定しました。そして驚くべきことに、私の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 =開発を設定するときに、私のASP.NET Coreアプリケーションは、STIL非常に遅いです。なぜ私は考えていない。私は、ASP.NETコア、EFコア、またはフレームワークの他の部分が内部的に変数をチェックし、開発環境では多くの時間を必要とする何かを行うという理論でしか説明できませんでした。

現時点では、本番環境を使用するための許容可能な回避策です。しかし、長期的には、データベースにいくつかのテストデータを埋め込むような、開発中にのみこの素晴らしい変数を使用したいと考えています。開発者モードでこのパフォーマンスの問題が発生する理由は何ですか?

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 

それがアクションを実行するための時間のほとんどをtooksので、あなたが、そのない起動時の問題を見ることができるように。しかし、ホームコントローラーのアクションは、単純なRazorビューを提供するだけで、そこに少なくともデータベース接続は作成されません。

生産

info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2] 
     Executed action MyApp.Controllers.HomeController.Index (MyApp) in 2728.3558ms 

そしてASP.NETは/キャッシュされた初期化され、物事のほとんどを有する第2の要求、=これはここで、環境と同じ要求の一例であるどのように遅い参照するには、次の

info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2] 
    Executed action MyApp.Controllers.HomeController.Index (MyApp) in 19.3621ms 
+0

汎用ASP.NET/ASP.NET MVCでは、BrowserLinkのためにこの問題が発生しました。それを無効にすると助けになりました。 –

+0

84秒間にデバッガを壊した場合、スタックトレースは何ですか? –

+0

@JohnPrideaux以前のASP.NET MVCスタックで既に問題が発生していたため、BrowserLinkはVSで既に無効になっています。また、私はStartup.Configure()の 'app.UseBrowserLink()'行をコメントアウトしたので、無効にする必要があります。しかし、これは問題を解決しません。 – Lion

答えて

2

これはASP.NETコアに直接関係していないことがわかりました。代わりに、マイクロソフトシンボルサーバーは、オプション>デバッグ>シンボルのデバッグ設定で有効になっていました:これは、すべてのMicrosoft assemblysのシンボルをロードするためのVisual Studioを作っ

enter image description here

。それは、一時的なフォルダに格納されているので、シンボルキャッシュが永続的ではないようです。だから、VSはそれらを時折リロードして、明白なパフォーマンスの問題を引き起こします。私はそれらを無効にし、今開発区域は生産とほぼ同じくらい速いです。

関連する問題