ASP.NetCoreでMiniProfilerを使用する方法

Webアプリケーションのパフォーマンスは、世界中で深刻な懸念事項です。開発者は、Webアプリケーションのプロファイルを作成し、パフォーマンスのボトルネックを見つけるために使用できる多くのツールを持っています。MiniProfilerは、そのようなツールの1つであり、Webアプリケーションをプロファイリングするためのシンプルでありながら強力なツールです。MiniProfilerは、実行速度の遅いクエリ、サーバーの応答時間の遅延などを検出するのに役立ちます。 

MiniProfilerは、.Net、ASP.Net、およびASP.NetCoreで使用できます。MiniProfilerのドキュメントはGitHubにあります。この記事では、MiniProfilerの説明、MiniProfilerが役立つ理由、およびMiniProfilerを使用してASP.Net Core MVCアプリケーションのプロファイルを作成し、アプリケーションのパフォーマンスの問題を発見する方法について説明します。

Visual Studio2017でASP.NetCoreMVCプロジェクトを作成します

まず、VisualStudioでASP.NetCoreMVCプロジェクトを作成しましょう。Visual Studio 2017がシステムで稼働している場合は、以下の手順に従ってASP.Net CoreMVCプロジェクトを作成します。

  1. Visual Studio 2017IDEを起動します。
  2. [ファイル]> [新規]> [プロジェクト]をクリックします。
  3. 表示されたテンプレートのリストから「ASP.NetCoreWebアプリケーション(.NetCore)」を選択します。
  4. プロジェクトの名前を指定します。
  5. [OK]をクリックしてプロジェクトを保存します。
  6. 新しいウィンドウ「New.NetCoreWebApplication…」が表示されます。
  7. 上部のドロップダウンリストから、ランタイムとして.Net Coreを選択し、ASP.Net Core 2.1(またはそれ以降)を選択します。.Net Core2.2を使用しています。
  8. プロジェクトテンプレートとして「Webアプリケーション(Model-View-Controller)」を選択します(下の図1を参照)。
  9. 「Dockerサポートを有効にする」および「HTTPS用に構成する」チェックボックスがオフになっていることを確認します。ここでは、これらの機能は使用しません。
  10. 「認証なし」が選択されていることを確認します。ここでも認証は使用しません。
  11. [OK]をクリックします。 

これらの手順に従うと、VisualStudioで新しいASP.NetCoreMVCプロジェクトが作成されます。このプロジェクトを使用して、MiniProfilerを使用してアプリケーションのプロファイルを作成します。

ASP.NetCoreにMiniProfilerをインストールして構成します

MiniProfilerの使用を開始するには、必要なNuGetパッケージをインストールする必要があります。MiniProfilerをプロジェクトにインストールするには、以下の手順に従います。

  1. ソリューションエクスプローラーウィンドウでプロジェクトを選択します。 
  2. 右クリックして[NuGetパッケージの管理...]を選択します
  3. 「MiniProfiler.AspNetCore.Mvc」パッケージを検索します。 
  4. 「インストール」をクリックして、NuGetパッケージをインストールします。 

これにより、MiniProfiler.AspNetCore.MvcNuGetパッケージがプロジェクトにインストールされます。プロジェクトでMiniProfilerの使用を開始するには、StartupクラスでMiniProfilerを構成する必要があります。次のコードスニペットは、IServiceCollectionインスタンスでAddMiniProfilerメソッドを呼び出して、パイプラインにMiniProfilerを追加する方法を示しています。

public void ConfigureServices(IServiceCollection services)

        {{

            services.AddMiniProfiler(options =>

            options.RouteBasePath = "/ profiler"

            );

            //通常のコード

        }

MiniProfilerをパイプラインに登録するときに指定できるオプションの詳細については、MiniProfilerのWebサイトを参照してください。

また、IApplicationBuilderインスタンスでUseMiniProfilerメソッドを呼び出して、コントローラーとビューでMiniProfilerの使用を開始する必要があります。

public void Configure(IApplicationBuilderアプリ、IHostingEnvironment env)

    {{

       app.UseMiniProfiler();

       //通常のコード

    }

次に、_Layout.cshtmlファイルのタグ内に次の2行を追加します。

@using StackExchange.Profiling

@addTagHelper *、MiniProfiler.AspNetCore.Mvc

また、WebページのどこにMiniProfilerウィンドウを表示するか、つまりレンダリング位置を指定する必要があります。これを行うには、タグ内に次のステートメントを含めることができます。


  

MiniProfilerの手順を使用して、ASP.Net CoreMVCコードをプロファイリングします

MiniProfilerは、ページの読み込み時間とデータベースクエリのパフォーマンスに関連する情報を通知します。アプリケーションを実行すると、次の図2のような出力が表示されます。画面の右上隅にあるMiniProfilerウィンドウに注意してください。

コードの特定の部分の実行にかかる時間を知るために、手順を利用できます。次のコードスニペットは、これを実現する方法を示しています。

public IActionResult Index()

 {{

       var miniProfiler = MiniProfiler.Current;

       リスト作成者= new List();

       miniProfiler.RenderIncludes(this.HttpContext);

       using(miniProfiler.Step( "Get Authors"))

       {{

           authors.Add(new Author(){Id = 1、FirstName = "Joydip"、LastName = "Kanjilal"、Address = "Hyderabad、India"});

           authors.Add(new Author(){Id = 2、FirstName = "Stephen"、LastName = "Smith"、Address = "NY、USA"});

           authors.Add(new Author(){Id = 3、FirstName = "Anand"、LastName = "Narayanan"、Address = "Chennai、India"});

           authors.Add(new Author(){Id = 4、FirstName = "Steve"、LastName = "Jones"、Address = "London、UK"});

       }

           View(作成者);を返します。

 }

次のコードスニペットは、上記のAuthorクラスがどのように見えるかを示しています。

パブリッククラス作成者

    {{

        public int Id {get; セットする; }

        public string FirstName {get; セットする; }

        パブリック文字列LastName {get; セットする; }

        パブリック文字列アドレス{取得; セットする; }

    }

アプリケーションを実行すると、以下の図3に示すように定義したステップにかかる時間がわかります。緑色で強調表示したエントリは、「作成者の取得」ステップの実行にかかった時間を示しています。

アプリケーションのコードの特定の部分をプロファイリングから無視する場合は、以下のコードスニペットに示すように、無視するコードを指定できます。

(MiniProfiler.Current.Ignore())を使用する

{{

  //ここにあなたがしないコードを書いてください

  // MiniProfilerにプロファイルを作成させます

}

MiniProfilerを使用してADO.Netクエリをプロファイリングします

MiniProfilerを使用してADO.Netクエリのプロファイルを作成することもできます。これを行うには、以下のコードスニペットに示すように、ProfileDbConnectionとProfileDbCommandを利用する必要があります。

using(SqlConnection connection = new SqlConnection(@ "Data Source = JOYDIP \ SQLEXPRESS; Initial Catalog = SyncDB; Trusted_Connection = Yes"))

     {{

       using(ProfiledDbConnection profiledDbConnection = new ProfiledDbConnection(connection、MiniProfiler.Current))

         {{

           if(profiledDbConnection.State!= System.Data.ConnectionState.Open)

               profiledDbConnection.Open();

             using(SqlCommand command = new SqlCommand

              ( "Select * From Authors"、connection))

               {{

                 using(ProfiledDbCommand profiledDbCommand =

                   新しいProfiledDbCommand(コマンド、接続、

                     MiniProfiler.Current))

                       {{                               

                         var data =

                          profiledDbCommand.ExecuteReader();

              //ここにコードを記述して作成者のリストを作成します

                        }

                 }

          }                      

    }

ProfileDbConnectionとProfileDbCommandがDbConnectionオブジェクトとDbCommandオブジェクトをどのようにラップするかに注意してください。MiniProfiler Webサイトから、MiniProfilerを使用してソースコードをプロファイリングする方法の詳細を学ぶことができます。

MiniProfilerは、.Net、Ruby、Go、およびNode.js用のシンプルなプロファイラーです。MiniProfilerを使用して、Dapper、Linq2SQL、およびEntityFrameworkによって生成されたクエリのプロファイルを作成できます。MiniProfilerは使いやすいことに加えて、アプリケーションに多くのオーバーヘッドを追加しません。MiniProfilerを使用すると、パフォーマンスに大きな影響を与えることなく、本番環境でアプリケーションのプロファイルを作成できます。