WPF(Windows Presentation Foundation)が登場してから約4年経つが、Windowsベースの業務アプリケーション開発におけるUI技術としては、今もなおWindowsフォームが主流といえる状況だ。現在はWindowsフォームでこと足りていたとしても、WPFの採用を検討すべきなのか? 相応のコストやリスクを払っても、WPFに移行する価値はあるのだろうか? 本セッションでは、こうした疑問に対するいくかのヒントが示された。
単純なスピード比較よりも、なめらかなユーザーインターフェイスに注目
「WPFはGPUを活用しているため、Windowsフォームよりも描画パフォーマンスが良い」とよくいわれているが、本当にそうなのか? グレープシティの八巻氏は、それを検証するために、WPFとWindowsフォームのパフォーマンス比較のデモを実施した。
まず、WindowsフォームとWPFでそれぞれButtonコントロールを1000個生成し、描画時間を自動計測。WPFの実行結果はWindowsフォームの数十分の1の時間となった。しかし、八巻氏は「実は、こうした絶対的なスピード比較はあまり意味がない」と指摘。
その言葉を裏付けるデモとして、続いてWPFでTextBoxコントロールを1000個生成し、実行時間を計測。すると、処理完了=ストップウォッチが止まるときに鳴るアラートと、TextBoxが表示されるタイミングに明らかなズレが生じた。次に、目視で手動計測したところ、自動計測した時間の十数倍という結果に。
「Windowsフォームは『即時モード』と呼ばれる命令型の描画で、描画命令を実行したタイミングでVRAMの実画面のフレームバッファに描画が行われる。これに対して、WPFは『保持モード』というデータ駆動型の描画方式で、コントロールの生成完了と画面に描画されるタイミングが一致しない。つまり、描画方式がまったく異なるので、単純に数字だけで比較できるものでないということ」と、八巻氏は説明。そして、この保持モードの利点は、「純粋なスピードではなく、“Fluid UI”(なめらかなユーザーインターフェイス)にある」とした。
たとえば、画面を高速スクロールするような場合、即時モードでは描画途中の状態で画面更新されてティアリングが発生してしまうケースがあるが、保持モードではそのようなことがなく、スムーズにスクロールできる。これは、DirectXランタイムにより、描画のタイミングをディスプレイの更新に同期させることができるからだ。
カスタマイズ性の高さに加え、「InputMan」で入力コントロールもカバー
八巻氏はWPFの描画パフォーマンス特性として、ほかに「UIの仮想化」を挙げた。これは、画面に表示されている部分のオブジェクトのみを生成するという技術で、これにより、レイアウトプロセスの負荷を軽減し、メモリ使用量も削減できる。当然、スクロールパフォーマンスも大幅に向上する。なお、WPF4の標準DataGridでは、行(縦)方向にしかUIの仮想化が行われないが、グレープシティの「FlexGrid」(WPF版は2011年夏発売予定)を利用することで、行と列の双方向にUIの仮想化が行われるようになるという。
さらに八巻氏は、柔軟で強力なUIレイアウト機能も、WPFの注目すべき特徴として挙げた。
「業務アプリケーションにおいても、多様な画面解像度への対応は、今後ますます重要となるテーマ。Windowsフォームの絶対配置で対応するのは大変だが、相対配置のWPFでは、ほとんどコーディングを必要とせずにUIの定義だけで柔軟に対応できる」
このようにカスタマイズ性の高いWPFだが、業務アプリケーション開発という視点で見ると、標準で用意されているコントロールがWindowsフォームのように細分化されていないという弱点もある。そこをカバーするのが、グレープシティが提供する日本仕様の業務系入力コントロール集「InputMan」だ。InputManでは、数値入力やマスク入力などWPF標準では用意されていないコントロールを提供しているほか、和暦やフリガナ入力といった日本仕様の機能にも対応。なお、WPF版のInputManは2011年4月11日のリリースを予定しているという。
将来性という観点からも、八巻氏は「少なくとも5年間は、おそらくマイクロソフトが今後出してくるプラットフォームでも、UI技術の基盤はXAMLベース」と考えており、「XAMLという技術に投資しておくことは無駄にならず、十分価値があること」と強調。
本セッション紹介文の最後に「答えは皆さん自身で出してください」とコメントしていた八巻氏だが、やはりWPFへの移行が「正解」ということになるようだ。
なお、八巻氏のblogではセッションで行われたデモについて詳しく解説している。