より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

.NET CoreのWinFormsの自己完結型とパフォーマンスの検証

.NET Core 3.0からWinFormsとWPFが利用できます。

これを使って検証してみたいと思います。

検証環境

まず、CLIで準備

dotnet new winforms -n WinFormsApplication dotnet run

f:id:rimever:20190401201013p:plain

dotnet new wpf -n WpfApplication dotnet run -p WpfApplication

f:id:rimever:20190401201056p:plain

自己完結型を出力

f:id:rimever:20190401201740p:plain

まだ.NET Core3.0はPreview版ですので

  1. .NET Core3.0 Previewをインストール
  2. 自己完結型でアプリケーションを出力
  3. .NET Core3.0 Previewをアンインストール
  4. 自己完結型で出力したアプリケーションを実行

という流れで実施します。

自己完結型のアプリケーションの出力はCLIでは以下です。

dotnet publish {プロジェクト名} -o {出力フォルダ} -r win10-x64

結果

問題なく、.NET Core3.0なしでも動作が確認できました。

当然といったら、当然ですが。

f:id:rimever:20190401201905p:plain

f:id:rimever:20190401201938p:plain

パフォーマンス

  1. WPF/WinFormsでフォームだけのアプリケーションを実装
  2. DotNetBenchmarkでアプリケーションを呼び出しては閉じるという操作を行って検証します。

結果は以下のようになりました。

WPF/WinForms .NET Framework/Core Mean Error StdDev Median Allocated
WPF .NET Framework 2,372.5 ms 49.05 ms 141.51 ms 2,354.2 ms 880 KB
WPF .NET Core 3,013.0 ms 58.58 ms 101.06 ms 3,028.7 ms 760 KB
WinForms .NETFramework 879.7 ms 34.25 ms 99.89 ms 870.7 ms 136 KB
WinForms .NET Core 1,942.1 ms 41.54 ms 122.47 ms 2,012.2 ms 136 KB

がっかりな結果となりました。 というのも、.NET Coreの方がパフォーマンスが優れているという評判だったので、デスクトップアプリケーションも、そうなのでは?と思ったのですが。

特にWinFormsは倍以上遅くなってしまっています。

まだPreview版ですので、これからに期待です。

2019/10/26 追記

.NET Core 3.0が正式リリースされたので改めて試してみました。

WPF/WinForms .NET Framework/Core Mean Error StdDev Allocated
WPF .NET Framework 635.7 ms 23.37 ms 68.18 ms 184 KB
WPF .NET Core 1,910.2 ms 37.85 ms 45.05 ms 120 KB
WinForms .NETFramework 353.8 ms 19.52 ms 57.56 ms 48 KB
WinForms .NET Core 1,529.0 ms 29.55 ms 46.87 ms 48 KB

やはり、残念ながら、.NET Coreの方が遅いですね。全般的に.NET Coreの方が速いはずなのですが。

このパフォーマンス比較は単純な起動だけなので、そこは遅いということかな。