69
グレープシティ株式会社 八巻 雄哉 今さらWPF? いいえ、今こそWPF! VSUG DAY 2012 Winter Twitter: @yamaki00 blog: d.hatena.ne.jp/Yamaki/

今さらWPF?いいえ、今こそWPF!

Embed Size (px)

DESCRIPTION

VSUG DAY 2012 Winter

Citation preview

Page 1: 今さらWPF?いいえ、今こそWPF!

グレープシティ株式会社八巻 雄哉

今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Twitter: @yamaki00blog: d.hatena.ne.jp/Yamaki/

Page 2: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

.NET開発者中心 読者調査レポート

2

5%

7%

28%

10%

49%

0% 10% 20% 30% 40% 50% 60%

Silverlight

ASP.NET MVC

ASP.NET Webフォーム

WPF

Windowsフォーム

2012年9月実施

利用状況

Page 3: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

.NET開発者中心 読者調査レポート

3

0% 10% 20% 30% 40% 50% 60% 70%

Silverlight

ASP.NET MVC

ASP.NET Webフォーム

WPF

Windowsフォーム

1年前と比較

2011年9月 2012年9月

Page 4: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

.NET開発者中心 読者調査レポート

4

-2.4%

0.9%

0.3%

2.9%

-11.8%

-14.0% -12.0% -10.0% -8.0% -6.0% -4.0% -2.0% 0.0% 2.0% 4.0%

Silverlight

ASP.NET MVC

ASP.NET Webフォーム

WPF

Windowsフォーム

1年前の時点からの増減

Page 5: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

最新バージョンでも新機能の追加があるよ

5

2.0 3.0 3.5 3.5 SP1 4.0 4.5

WPF

新機能 新機能 新機能 新機能

新機能

Windows Forms

新機能

Page 6: 今さらWPF?いいえ、今こそWPF!
Page 7: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Build 2012でもWPFのセッションあったよ

7

Page 8: 今さらWPF?いいえ、今こそWPF!

Your AppDesktop

Web

WinRT

時代はWebかWinRTじゃないの?

8

Page 9: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

そのアプリ、WinRTで大丈夫?

9

Windows 8でしか動かないけど大丈夫?

全画面になっても大丈夫?(他からコピペしたりする操作はない?)

データグリッドないけど大丈夫?

他のアプリとサーバー介さずに連携とかしてない?

特殊なハードウェアを使ったりしてない?

Page 10: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

そのアプリ、Webで大丈夫?

10

特殊なハードウェアを使ったりしてない?

マルチウィンドウじゃなくなるけど大丈夫?

ファンクションキーとか使ってないよね?

パフォーマンスにシビアじゃないよね?

AndroidとかiOSでも使うんだよね?

HTML5ならマルチデバイス対応楽勝とか思ってないよね?

Page 11: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Desktopという選択肢は残る

11

DesktopWeb WinRT

Page 12: 今さらWPF?いいえ、今こそWPF!

Your App WPFWindows

Forms

デスクトップアプリならどっち?

12

Page 13: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

3つの疑問

13

1. Windowsフォームを使い続けていて何か問題があるのか?

2. WPFにするとどんないいことがあるのか?

3. WPFの将来性は大丈夫なのか?

Page 14: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Windowsフォームを使い続けていて何か問題があるのか?

14

Page 15: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

旧来版Visual Basic Windowsフォーム WPF

登場年月 1991年 (21歳) 2002年(10歳) 2006年(6歳)

開発環境のサポート - ✓ ✓

64ビット - ✓ ✓

ビジュアルスタイル - ✓ ✓

最新開発環境 Visual Basic 6.0 Visual Studio 2012 Visual Studio 2012

マネージコード(.NET) - ✓ ✓

描画の基盤技術 GDI GDI/GDI+ Direct3D

ベクターベースのUI - - ✓

2Dと3Dとメディアの統合 - - ✓

UI記述 Visual Basic Visual Basic、C# XAML

旧来版Visual Basicも含めた比較表

15

Page 16: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

基盤技術と畳は新しい方が良い

16

描画の基盤技術

ユーザーインターフェイス

基盤技術 起源 誕生 年齢

Windowsフォーム/VB6

GDI Windows 1.0(GDI.EXE) 1985年 27歳

WPF Direct3D Windows 3.1(WinG) 1993年 19歳

基盤技術 起源 誕生 年齢

Windowsフォーム/VB6

USER Windows 1.0(USER.EXE) 1985年 27歳

WPF System.Windows.Controls

Windows Vista(PresentationFramework.dll)

2006年 6歳

Page 17: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

GDIは第一級の描画ルートではない

グラフィックドライバモデルの大幅な変更

Windows 8からXDDMを非サポート

XP Display Driver Model(GDI)

XP Display Driver Model(DirectDraw/Direct3D)

ユーザーモード/カーネルモード境界

GDI32 DirectX ランタイム

GDI/GDI+レガシーDirectX

Direct3D 9カーネル/A

PI

ドライバ

XDDM(Windows XP)

Windows Vista Display Driver Model(WDDM)(カーネル)

ユーザーモード/カーネルモード境界

DirectX ランタイム

Windows Vista Display Driver Model(WDDM)(ユーザー)

GDI/GDI+

レガシー

DirectXDirect3D

9Direct3D

9 ExDirect3D

10

カーネル/A

PI

ドライバ

WDDM(Windows Vista以降)

17

Page 18: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Demo

WPF Drawing Performance

http://www.kynosarges.org/WpfPerformance.html

18

Page 19: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

XDDM環境におけるGDIのパフォーマンス

19

Page 20: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

GDI+

20

0 2000 4000 6000 8000 10000 12000 14000

Anti-Ailasing Off

Anti-Ailasing On

Anti-Ailasing Off Anti-Ailasing On

XDDM(Windows XP) 1101 5201

WDDM(Windows 8) 12630 12734

Page 21: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Demo

21

Page 22: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

WPF(DrawLine with Freeze)

22

0 2000 4000 6000 8000 10000 12000 14000

Anti-Ailasing Off

Anti-Ailasing On

Anti-Ailasing Off Anti-Ailasing On

XDDM(Windows XP) 667 3312

WDDM(Windows 8) 571 3385

Page 23: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

ベンチマークが語るもの

23

ベンチマークの数値そのものはほとんど重要ではない

Windows 8でGDIが遅いといっても、5年前のWindows XPマシンよりは数倍速い

その技術が過去のもの扱いかどうか

ようするに “おわコン” なのかどうか

Page 24: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

即時モード vs 保持モード

Windowsフォーム(GDI、GDI+)

即時モード

WPF

保持モード

24

Page 25: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

即時モード

命令型描画

アプリケーション自身が直接描画

描画命令の実行と実画面のフレームバッファへの描画が同期

ディスプレイの更新に同期させる手段は基本的にない

実画面のフレームバッファ

アプリケーション

DrawText

DrawLine

DrawImage

GDI/GDI+

25

Page 26: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

保持モード

データ駆動型描画

UIスレッドでは描画データを生成して格納(シリアル化)

描画スレッドでビジュアルオブジェクトをスキャンし、Direct3Dのバッファに描画(UIスレッドと非同期)

DirectXランタイムによりディスプレイの更新に同期Direct3Dのサーフェス

Media Integration Layer(wpfgfx_v****.dll)

アプリケーション

ビジュアルオブジェクト

WPF

26

Page 27: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

WPFのパフォーマンス特性

WPFのパフォーマンス特性を生かせるのは“Fluid UI”「なめらかなユーザーインターフェイス」

スループットよりもレスポンス重視

連続性 直感性 可逆性

27

Page 28: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Demo

28

Page 29: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

WPF Direct2D

29

Microsoftが作るデスクトップアプリ

Windows Live メール

Page 30: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

即時モード vs 保持モード

即時モード

GDI、GDI+(Windowsフォーム)

Direct2D

保持モード

WPF

30

Page 31: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

移行の流れ

31

Windowsフォーム

• Visual Basic

• C#

WPF

• Visual Basic

• C#

GDI

•C++

Direct2D

•C++

Page 32: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Demo

32

Page 33: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

3つの疑問

33

1. Windowsフォームを使い続けていて何か問題があるのか?

答え:

GDIは “おわコン”

Page 34: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

WPFにするとどんないいことがあるのか?

34

Page 35: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

画面解像度(総画素数)の多様化

2006年7月

1280

x

1024

1024

x

768

1600

x

1200

1400

x

1050

その他

2012年10月

1920x

1080

1280x

1024

1366

x

768

1920

x

1200

1280

x

800

1680

x

1050

その他

Yuya Yamaki’s blog(http://d.hatena.ne.jp/Yamaki/)

38

Page 36: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

画面の回転

36

Page 37: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

固定画面解像度

1024ピクセル

768ピクセル

最大化/最小化ボタンは非表示

37

Page 38: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

17インチ、SXGA(1,280×1,024)

38

Page 39: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

23インチ、FHD(1,920×1,080)

39

Page 40: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Demo

40

Page 41: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Intel: Retina laptop, desktop displays coming in 2013

41

http://liliputing.com/2012/04/intel-retina-laptop-desktop-displays-coming-in-2013.html

Page 42: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

ディスプレイの高精細化

42

モデル名ディスプレイサイズ(インチ)

解像度(総画素数)

ピクセル密度(PPI)

HTC J butterfly HTL21 5 1,920×1,080 440

iPhone 4S 3.5 960×640 326

Samsung ATIV S(Windows Phone 8) 4.8 1,280×720 306

新しいiPad 9.7 2,048×1,536 264

Acer ICONIA TAB A700 10.1 1,920×1,200 224

MacBook Pro(Retina) 15 2,880×1,800 220

Surface for Windows 8 Pro 10.6 1,920×1,080 208

VAIO Duo 11 11.6 1,920×1,080 190

Page 43: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

約96PPI 23インチ、FHD(1,920×1,080)

43

Page 44: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

約128PPI 23インチ、WQHD(2,560×1,440)

44

Page 45: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

約192PPI 23インチ、QFHD(3,840×2,160)

45

Page 46: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

DPIスケーリング

46

システムフォントやUIのサイズをスケールさせる機能

Page 47: 今さらWPF?いいえ、今こそWPF!

100% 200%

Page 48: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

DPIスケーリング

48

システムフォントやUIのサイズをスケールさせる機能

Windows 7まで既定値は100%ユーザーが自分で変更しない限り

125%などのスケールにはならない

Windows 8ディスプレイのピクセル密度により

既定値が変化

Page 49: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Windows 7

49

15.6インチ 340×190mm 1920×1080 約143PPI

Page 50: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Windows 8

50

15.6インチ 340×190mm 1920×1080 約143PPI

Page 51: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

DPIスケーリングの種類

51

XP形式のスケーリング普通のスケーリングアプリケーションがスケーリングに

対応していなければならない

DPI仮想化(Vistaから搭載)一度100%で画面表示領域外に描画し、

それをビットマップ的に拡大して表示スケーリングに非対応のアプリでも、

レイアウトはくずれない(救済措置)ビットマップ的な拡大のため、

ぼやけた印象の表示となる

Page 52: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

125%以下 126%以上

52

カスタムサイズ変更オプション

XP形式のスケーリング:Onが既定 XP形式のスケーリング:Offが既定

Page 53: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

53

DPIスケーリングが変わるとどうなるのか?

Windowsフォームの場合

Page 54: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

XP形式のスケーリング:On XP形式のスケーリング:Off

54

Windowsフォームの場合(150%)

Page 55: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Windowsフォームのスケール処理

55

設計時のフォントサイズ/DPIと実行時のフォントサイズ/DPIを比較し、その比率をもとにスケール処理が行われる

異なるシステムフォントサイズ/DPI設定の環境でプロジェクトを共有できない

スケール処理はフォームの初回読込時の一度きり

動的に位置やサイズを設定する際には、比率を乗算してやる必要がある

スケール処理は各コントロールの実装に依存

Page 56: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

DataGridViewとSPREAD (100%)

56

Page 57: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

DataGridViewとSPREAD (150%)

57

Page 58: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

58

DPIスケーリングが変わるとどうなるのか?

WPFの場合

Page 59: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

XP形式のスケーリング:On XP形式のスケーリング:Off

59

WPFの場合(150%)

Page 60: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

WPFのスケール処理

60

ピクセルという単位系がスケールされる

DPIスケーリングの変更に関して注意しなければいけない点は特にない

100%(96DPI) 150%(144DPI) 200%(192DPI)

論理的な1ピクセル 1ピクセル 1.5ピクセル 2ピクセル

Page 61: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

3つの疑問

61

2. WPFにするとどんないいことがあるのか?

答え:

様々な画面解像度への対応が楽

DPIスケーリングへの対応は不要

Page 62: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

WPFの将来性は大丈夫なのか?

62

Page 63: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

3つの疑問

63

3. WPFの将来性は大丈夫なのか?

答え:

分かりません。

でも、XAMLの将来性は大丈夫でしょう。

Page 64: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

まとめ

Windowsフォームの既存資産を何が何でもWPFに移行すべきか?

いいえ。しかし、XAML、もしくはその他のUIテクノロジに対する投資は今から行うべき

これから新規で作るデスクトップアプリは?

WPFで要件を満たせるかどうかを検討すべき

64

Page 65: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Desktop Pack 2013シリーズ

65

44%OFF 42%OFF

Page 66: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

は、

WebでもWinRTでも開発者の皆様を支援するツールを提供していきます!

66

Page 67: 今さらWPF?いいえ、今こそWPF!

VSUG DAY 2012 Winter

Visual WebGui Pro studio web&mobile

67

Visual Studio統合Windowsフォーム

互換C/S型の開発手法

モダンなHTML5アプリ

モバイル向けビューも対応

クラウド対応

既存の開発手法とスキルを最大限に活用し、

HTML5アプリによるマルチデバイス対応を行う

Page 68: 今さらWPF?いいえ、今こそWPF!
Page 69: 今さらWPF?いいえ、今こそWPF!