noxi雑記

.NET、Angularまわりの小ネタブログ

ASP.NET と ASP.NET Core のパフォーマンスを比較する(2018年10月版)

もうすぐ.NET Core 2.2が出るという時期ではありますが、ASP.NET Core 2.1のパフォーマンスを見ていなかったため、改めてASP.NETASP.NET Core + EntityFrameworkのパフォーマンスチェックをしてみました。
何故EntityFrameworkを含めるかというと、私が仕事で使用しているからです。

方法

簡単なデータベースの中身を返すWebAPIを作成し、ApacheBenchでレスポンスにかかる時間や秒間あたりのレスポンス数を調べます。今回の調査では総リクエスト数5000、同時接続数を10/100/250/500の4種類としました。実際に返るレスポンスサイズは8KB程度です。 EntityFrameworkでデータを取得する際にNoTrackingを使用する場合としない場合についても計測を行います。

今回使用したソースはこちらです

環境

  • Azure App Service (S1/S3)
  • Azure Database (S3: 100DTUs)
  • ApacheBench 2.3 (Ubuntu Server 18.04 / Standard D4s v3 (4 vcpus, 16 GB memory))
  • .NET Framework 4.7.1 + ASP.NET 5.2.6 + EntityFramework 6.2.0
  • .NET Core 2.0.9 + ASP.NET Core 2.0.9
  • .NET Core 2.1.5 + ASP.NET Core 2.1.5

※ Azureは全てWest US2上の同じResourceGroupに配置しています ※ App Serviceはそれぞれのアプリ毎に作成し同じApp Service Plan上に配置し、計測時に1つだけ起動した状態にしています

結果

AppService (S1)

1リクエストあたりの平均レスポンス時間(ミリ秒)

10 100 250 500
net471 Tracking 167.063 1842.484 4583.623 9800.010
core20 Tracking 165.413 1576.044 4055.595 9064.033
core21 Tracking 164.435 1553.852 4141.086 9569.440
10 100 250 500
net471 NoTracking 122.673 1499.628 3316.566 6433.409
core20 NoTracking 131.614 1221.338 3154.031 6569.664
core21 NoTracking 166.158 1246.887 3271.437 6768.691

秒間あたりの平均レスポンス数

10 100 250 500
net471 Tracking 59.86 54.27 54.54 51.02
core20 Tracking 60.45 63.45 61.64 55.16
core21 Tracking 60.81 64.36 60.37 52.14
10 100 250 500
net471 NoTracking 81.52 66.68 75.38 77.72
core20 NoTracking 75.98 81.88 79.26 76.11
core21 NoTracking 60.18 80.20 76.42 73.87

※ 全てAppService PlanのCPUはほぼ100%張り付き

AppService (S3)

1リクエストあたりの平均レスポンス時間(ミリ秒)

10 100 250 500
net471 Tracking 42.936 360.487 924.910 1935.405
core20 Tracking 43.572 392.093 1109.468 2095.936
core21 Tracking 41.744 378.103 1028.404 1993.119
10 100 250 500
net471 NoTracking 29.279 263.291 656.166 1399.082
core20 NoTracking 36.279 294.590 770.287 1497.199
core21 NoTracking 36.025 291.312 787.239 1569.006

秒間あたりの平均レスポンス数

10 100 250 500
net471 Tracking 232.90 277.40 270.30 258.34
core20 Tracking 229.50 255.04 225.33 238.56
core21 Tracking 239.55 264.48 243.10 250.86
10 100 250 500
net471 NoTracking 341.54 379.81 381.00 357.38
core20 NoTracking 275.64 339.45 324.55 333.96
core21 NoTracking 277.59 343.27 317.57 318.67

※ 全てAppService PlanのCPUは40%程度