windowsフォームで大丈夫か?一番良いのを頼む。
DESCRIPTION
TRANSCRIPT
Developers Summit 2011
Windowsフォームで大丈夫か?一番良いのを頼む。
グレープシティ株式会社
八巻 雄哉 blog:d.hatena.ne.jp/Yamaki/
twitter:yamaki00
Developers Summit 2011
1993年にVisual Basic向けのコンポーネントを販売開始
Microsoft社の開発プラットフォームで製品を 提供し続けて17年のコンポーネントベンダー
多彩なラインナップを誇る製品群
日本仕様を強みとした 自社開発製品
海外の優れた製品を 日本語版としてローカライズ
Developers Summit 2011
Visual Basic 6.0 Windowsフォーム WPF
サポート - ✓ ✓
64ビット - ✓ ✓
Visual Style - ✓ ✓
開発環境 Visual Basic 6.0 Visual Studio 2010 Visual Studio 2010
マネージコード - ✓ ✓
描画技術 GDI GDI/GDI+ Direct3D
ベクター描画 - - ✓
2D、3D、 メディアの統合
- - ✓
UI記述 Visual Basic Visual Basic、C#… XAML
一般的な比較表
Developers Summit 2011
GPU性能の進化
スコアA:http://www.leoplanet.co.jp/3d_videochip.htm スコアB:http://mizushima.ne.jp/topic/GPU-benchmark/index.php
GPUはムーアの法則を超えるスピードで進化 GPU名 スコアA スコアB 発売時期
Radeon 9800 (AGP) 27 998 2003年Q2
Radeon X1800 XT 100 5700 2005年11月
Radeon HD 2900 XT 240 11137 2007年5月
Radeon HD 4870 434 15943 2008年6月
ATI Radeon HD 5970 824 18533 2010年5月
GeForce 6800 47 2008 2004年Q4
GeForce 7900 GTX 150 6953 2006年3月
GeForce 8800 GT 262 12676 2007年11月
GeForce GTX 280 470 16257 2008年6月
GeForce GTX 580 965 18376 2010年11月
Developers Summit 2011
即時モード
命令型描画
アプリケーション自身が 直接描画
描画命令の実行と実画面のフレームバッファへの描画が同期
ディスプレイの更新に同期させる手段は基本的にない 実画面のフレームバッファ
アプリケーション
DrawText
DrawLine
DrawImage
GDI/GDI+
Developers Summit 2011
保持モード
データ駆動型描画
UIスレッドでは描画データを生成して格納(シリアル化)
描画スレッドでビジュアル オブジェクトをスキャンし、Direct3Dのバッファに描画(UIスレッドと非同期)
DirectXランタイムによりディスプレイの更新に同期
Direct3Dのサーフェス
Media Integration Layer (wpfgfx_v****.dll)
アプリケーション
ビジュアル オブジェクト
WPF
Developers Summit 2011
DataGridのスクロール
Windows FormのDataGridViewでは問題なく できていた50列×1000行程度のデータの 縦スクロールのパフォーマンスが非常に悪い
Developers Summit 2011
UIの仮想化
強力かつ柔軟なレイアウトシステムの特性
パネルに子要素が追加されるたびに、再帰的に子要素の大きさと位置の測定が行われる
リスト項目を大量に表示するコントロールでは、パフォーマンス負荷となる
画面に表示されている部分のオブジェクトのみを生成するのがUIの仮想化
レイアウトプロセスの負荷低減
メモリ使用量の削減
Developers Summit 2011
標準DataGrid vs FlexGrid
標準DataGrid
列方向にはUIの仮想化が行われない
FlexGrid
行と列の双方向にUIの仮想化が行われる
Developers Summit 2011
フレックスグリッド
FlexGrid for WPF 1.0J
2011年夏 発売予定
FlexGrid for Silverlight 1.0J
2011年3月14日 発売予定
http://www.grapecity.com/japan/FlexgridSilverlight/demo/
Developers Summit 2011
WPFのパフォーマンス特性
ベンチマークのような 絶対的なスピードはあまり意味がない
WPFのパフォーマンス特性を生かせるのは “Fluid UI”「なめらかなユーザーインターフェイス」
実際に簡単なプロトタイプ を作って確認しよう
Developers Summit 2011
20年前に登場した技術「GDI」
グラフィックドライバモデルの大幅な変更
GDIハードウェアアクセラレーションの廃止
Windows 7で部分的に復活(ビットマップ転送系)
XP Display Driver Model(GDI)
XP Display Driver Model (DirectDraw/Direct3D)
ユーザーモード/カーネルモード境界
GDI32 DirectX ランタイム
GDI/GDI+ レガシーDirectX
Direct3D 9
カーネル/API
ドライバ
XPDM(Windows XP)
Windows Vista Display Driver Model(WDDM) (カーネル)
ユーザーモード/カーネルモード境界
DirectX ランタイム
Windows Vista Display Driver Model(WDDM) (ユーザー)
GDI/GDI+
レガシーDirectX
Direct3D 9
Direct3D 9 Ex
Direct3D 10
カーネル/API
ドライバ
WDDM(Windows Vista以降)
Developers Summit 2011
描画はDWMが管理 Windows Vista(WDDM 1.0)の場合 GDIアプリケーション
GDIアプリケーション
Direct3Dアプリケーション(WPF含む)
DWM
描画イメージ
(ARGB形式)
描画イメージ
描画イメージ(ARGB形式) プロセス間共有
CPU描画
フレームバッファ(システムメモリ)
Direct3Dサーフェイス (ビデオメモリ)
バック バッファ
描画イメージ(ARGB形式) プロセス間共有
CPU描画
描画イメージ
(ARGB形式)
合成して更新
Present
フレームバッファ(システムメモリ)
プロセス間共有サーフェイス
隠しサーフェイス (ビデオメモリ)
サーフェス反転 でリダイレクト
コピー
コピー
Developers Summit 2011
画面解像度の多様化
1280x1024
1024x768 1280x800 1680x1050
1920x1080
1440x900
1366x768
1920x1200
1600x1200
1400x1050 1600x900
その他
2011年1月のグレープシティWebサイト 訪問者における画面解像度の内訳
Developers Summit 2011
WPFのレイアウト機能
相対配置
Grid、StackPanel、WrapPanel、DockPanel
領域の有効活用
GridSplitter、Expander、Visibility.Collapsed
ベクタ描画を活かした拡縮
ViewBox
Developers Summit 2011
WPFのレイアウトのしくみ
パネル
子要素
利用可能サイズを通知 子要素の各サイズ系プロパティが評価され、希望サイズが決定
希望サイズを取得
Measureメソッド
DesiredSizeプロパティ
測定パス
DesiredSizeプロパティ 配置パス
子要素を配置し、サイズを決定
Developers Summit 2011
カスタマイズ性 vs コントロール数
Windowsフォーム
外観のカスタマイズ性が低い
細分化されたコントロールによる高い生産性
WPF
外観のカスタマイズ性が高い
標準で用意されているコントロールが少ない
業務アプリでは機能のカスタマイズが重要
Developers Summit 2011
業務アプリで使われる エディット系コントロール
Windowsフォーム WPF
テキスト TextBox TextBox
日付 DateTimePicker DatePicker
数値 NumericUpDown -
マスク MaskedTextBox -
数値やマスクといったコントロールが 用意されていない
用意されているコントロールも機能不足
Developers Summit 2011
比較:日付入力コントロール
数字のみの入力 ✔ -
ドロップダウンカレンダー ✔ ✔
スピンボタンによる日付入力 ✔ -
時刻入力 ✔ -
Null値サポート - ✔
ドロップダウンボタンの外観
Developers Summit 2011
業務アプリで使われる エディット系コントロール
Windowsフォーム WPF InputMan for WPF
テキスト TextBox TextBox GcTextBox
日付 DateTimePicker DatePicker GcDateTime
数値 NumericUpDown - GcNumber
マスク MaskedTextBox - GcMask
InputManは 日本仕様の業務系入力コントロール集
17年かけて培ってきた ノウハウを結集
17年前のInputMan
Developers Summit 2011
比較:日付入力コントロール
数字のみの入力 ✔ - ✔
ドロップダウンカレンダー ✔ ✔ ✔
スピンボタンによる日付入力 ✔ - ✔
時刻入力 ✔ - ✔
Null値サポート - ✔ ✔
ドロップダウンボタンの外観
和暦、入力時/表示時の書式設定、入力候補、フィールド単位のフォーカス制御、…
- - ✔
Developers Summit 2011
インプットマン
InputMan for WPF 1.0J
2011年4月11日発売予定
InputMan for Silverlight 1.0J
発売中
http://tools.grapecity.com/demo/inputmansl/
Developers Summit 2011
将来性(噂レベルの話)
ARM “Windows next"
"Jupiter"
タブレット
.appx XAML technology
App Store
2012年
Visual Studio 2012
Developers Summit 2011
Windowsフォーム WPF
“Fluid UI” - ✓
UIレイアウト 絶対配置が基本 (追加コントロール による相対配置)
相対配置が基本 (絶対配置も可)
業務コントロール ✓ ✓(グレープシティ)
将来性 - ✓
ブラウザアプリケーション - ✓
アーキテクチャパターン - (イベント駆動型 プログラミング )
MVVM
まとめ