.NET5は本当に速いのか検
証してみた
株式会社SAKURUG
エンジニアリングユニット
草場 友光
.NET ラボ 2021年7月
自己紹介
• 普段は主にWebFormsアプリの
保守のお仕事をしてます。
• 古めのシステムが多いので時
代に取り残されぬよう新しい
技術を一つでも入れるよう
日々努力しています。
• tomo_kusaba
宣伝
【VISION】ひとの可能性を開花させる企業であり続ける
VISIONに共感できる仲間募集中。
注意
• このセッションは個人的に調査したものであり、公正さについ
てはそれぞれで検証をしてください。
• 一環境での検証結果ということに留意してください。
Performance Improvements in .NET 5
• https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/
Performance Improvements in .NET 5
[Benchmark] public string ToString12345() => 12345.ToString();
[Benchmark] public string ToString123() => ((byte)123).ToString();
Method Runtime Mean Ratio Allocated
ToString12345 .NET FW 4.8 45.737 ns 1.00 40 B
ToString12345 .NET Core 3.1 20.006 ns 0.44 32 B
ToString12345 .NET 5.0 10.742 ns 0.23 32 B
ToString123 .NET FW 4.8 42.791 ns 1.00 32 B
ToString123 .NET Core 3.1 18.014 ns 0.42 32 B
ToString123 .NET 5.0 7.801 ns 0.18 32 B
Performance Improvements in .NET 5
[Benchmark]
public string Roundtrip()
{
byte[] bytes = Encoding.UTF8.GetBytes("this is a test");
return Encoding.UTF8.GetString(bytes);
}
Method Runtime Mean Ratio Allocated
Roundtrip .NET FW 4.8 113.69 ns 1.00 96 B
Roundtrip .NET Core 3.1 49.76 ns 0.44 96 B
Roundtrip .NET 5.0 36.70 ns 0.32 96 B
検証用アプリケーション
• CSVを読み込みDataGridViewに表示する
• みんな大好き、WindowsForms
• CSVパーサーはTextFieldParser
• 比較対象は、.NET5 vs .NET Framework4.5
検証1
• DataGridViewの動きのなめらかさ
• 約1300行のデータを読み込まる
• フルHD全画面表示の状態でスクロールしてみる
.NET Framework 4.5
.NET 5
検証1結論
• .NET 5のほうがだいぶスムーズな動きになってる
検証2
• CSV自体の読み込みの速さを検証
• MSTest2で計測
• テストデータは郵便番号辞書(124523件)
• (余談ですがこのテストデータで検証1をやると差が出ない)
検証2結果
時間
.NET 5 1.6秒
.NET Framework 4.5 2.1秒
1.3倍くらい速い!
検証3
• DBアクセスでも差は出るのか?
• みんな大好きOracleで比較
• 3865回+1回のSELECTで比較(キーはrowid)
• 同期処理
• アクセス先はVPN越し(PING平均-17ms)
Oracleドライバー バージョン
.NET 5 Oracle.ManagedDataAccess.Core 3.21.1
.NET Framework Oracle.ManagedDataAccess 19.11.0
インターネット
検証3
VPN 検証App
検証3結果
• さすがに、DBアクセス時間が主となると差は出にくい
• 従来通り地道にパフォーマンス改善するしか
時間
.NET 5 2.3分
.NET Framework 4.5 2.3分
検証3-2
• ネットワーク遅延の影響を排除した場合
Windows Server 2016
Hyper-V
Windows Server 2016
Oracle 18c XE
Windows 10
検証App
検証3-2結果
• ネットワーク時間を極力短くしていくと差が出てくる
時間
.NET 5 4.7秒
.NET Framework 4.5 5.3秒
検証4
• WebFormsとその移行先とされるBlazorとで比較した場合
• 定量的な比較は難しいので感覚的なレスポンス感で比較
• テストデータは郵便番号辞書
• DBからのSQLで検索したパターン
• CSVを読み込んでLINQで検索したパターン
検証4-ソースコード
• .NET Framework版(WebForms)
• https://github.com/tomokusaba/NetLab202107-4fw
• .NET 5版(Blazor)
• https://github.com/tomokusaba/NetLab202107-4Net5
検証4 – 動かしてみよう
• .NET Framework版(WebForms)
• https://musewiki.net/netlab202107-4fw/
• .NET5 (Blazor)
• https://musewiki.net/Netlab202107-Net5
動作環境
Windows Server2016 (IIS10.0)
Oracle 18c XE
Xeon E3-1225 v6 Hyper-V環境 2コア
Memory:6GB
参考
先ほどの高尾さんの話も速くなっている一つの要因
検証-4 結果
• 単純なDBアクセスだけだとそれほど変わらない。
• .NETの処理時間よりもDB側の処理時間の方が長い??
• 全体に、CSVやDBからのオブジェクト化やLinqについては.NET5の
方が速い
• この差を価値とみるかどうかは、それぞれ
結論
• 内部処理に関わるところはほぼすべて高速化されてる
• DBアクセスに関わるところは微妙
• 特に、コンソールアプリ・WindowsFormsは新規で作るのなら.NETへ
の移行がおすすめ。
• でも、個人的には手持ちのアプリがほぼすべてWebForms!
おしまい

.Netlab202107