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

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

WPFとWinFormsの起動比較

WPFでシステムを開発している時のこと

私「どうしても起動遅いですね」
メンバー「WPFだからじゃないですか」
私「どうしても処理が重くなってしまって」
リーダー「WPFだからね」

実際どんなものなのか。私なりに検証して見ることにしました。

※あくまでも参考でお願いします。

検証方法

使用ライブラリ

  • BenchmarkDotNet
  • FlaUI.UIA3

BenchmarkDotNetで計測を行います。 Processクラスを使うだけでもいいのですが、どうしてもウインドウが表示されてからを判定したいのでFlaUIという自動UIのライブラリを使用しています。

検証方法

何もない800,600のウインドウを表示するだけのアプリをWPF,WinFormsそれぞれに用意します。

f:id:rimever:20181024213939p:plain

本当にのっぺらぼうなウインドウです。

そして、下記のようなアプリを呼び出しては閉じを行う処理で、計測して比較してみます。

        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個配置したら? 実処理も実装したら? も試してみたいですね。