WPFでシステムを開発している時のこと
私「どうしても起動遅いですね」 メンバー「WPFだからじゃないですか」
私「どうしても処理が重くなってしまって」 リーダー「WPFだからね」
実際どんなものなのか。私なりに検証して見ることにしました。
※あくまでも参考でお願いします。
検証方法
使用ライブラリ
- BenchmarkDotNet
- FlaUI.UIA3
BenchmarkDotNetで計測を行います。 Processクラスを使うだけでもいいのですが、どうしてもウインドウが表示されてからを判定したいのでFlaUIという自動UIのライブラリを使用しています。
検証方法
何もない800,600のウインドウを表示するだけのアプリをWPF,WinFormsそれぞれに用意します。
本当にのっぺらぼうなウインドウです。
そして、下記のようなアプリを呼び出しては閉じを行う処理で、計測して比較してみます。
public void Launch(string filePath) { var app = FlaUI.Core.Application.Launch(filePath); using (var automation = new UIA3Automation()) { app.WaitWhileBusy(); var window = app.GetMainWindow(automation); window.Close(); } }
結果
BenchmarkDotNet=v0.11.1, OS=Windows 10.0.17134.345 (1803/April2018Update/Redstone4) Intel Core i7-7920HQ CPU 3.10GHz (Kaby Lake), 1 CPU, 2 logical and 2 physical cores [Host] : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.3190.0 DefaultJob : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.3190.0
Method | Mean | Error | StdDev |
---|---|---|---|
WPF | 411.1 ms | 11.159 ms | 30.55 ms |
WinForms | 232.1 ms | 4.893 ms | 14.43 ms |
この結果だけを見る限りでは、WinFormsの方が早いようです。
周囲が言っていたようにWPFは確かに重いかも。
終わりに
ただのウインドウを起動しては閉じるだけでした。
余裕があればボタンが10個配置したら? 実処理も実装したら? も試してみたいですね。