ASP.NET と ASP.NET Core のパフォーマンスを比較する(2018年10月版)
もうすぐ.NET Core 2.2が出るという時期ではありますが、ASP.NET Core 2.1のパフォーマンスを見ていなかったため、改めてASP.NETとASP.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%程度