.NET Core 3.0からWinFormsとWPFが利用できます。
これを使って検証してみたいと思います。
検証環境
- Visual Studio 2019
- .NET Core 3.010431(preview)
- .NET Core 2.2
まず、CLIで準備
dotnet new winforms -n WinFormsApplication dotnet run
dotnet new wpf -n WpfApplication dotnet run -p WpfApplication
自己完結型を出力
まだ.NET Core3.0はPreview版ですので
という流れで実施します。
dotnet publish {プロジェクト名} -o {出力フォルダ} -r win10-x64
結果
問題なく、.NET Core3.0なしでも動作が確認できました。
当然といったら、当然ですが。
パフォーマンス
- WPF/WinFormsでフォームだけのアプリケーションを実装
- 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の方が速いはずなのですが。
このパフォーマンス比較は単純な起動だけなので、そこは遅いということかな。