Enviar búsqueda
Cargar
Msを16倍出し抜くwpf開発2回目
•
Descargar como PPTX, PDF
•
9 recomendaciones
•
8,494 vistas
C
cct-inc
Seguir
Msを16倍出し抜くwpf開発2回目
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 22
Descargar ahora
Recomendados
Msを16倍出し抜くwpf開発1回目
Msを16倍出し抜くwpf開発1回目
cct-inc
WPF開発での陥りやすい罠
WPF開発での陥りやすい罠
Sho Okada
Wpfと非同期
Wpfと非同期
yone64
最速C# 7.x
最速C# 7.x
Yamamoto Reki
C#/WPFで作るデスクトップマスコット入門
C#/WPFで作るデスクトップマスコット入門
Fujikido
低レイヤー入門
低レイヤー入門
demuyan
未来(あす)Xamlの1msに泣かないために
未来(あす)Xamlの1msに泣かないために
Yutaka Tsumori
今さらWPF?いいえ、今こそWPF!
今さらWPF?いいえ、今こそWPF!
Yuya Yamaki
Recomendados
Msを16倍出し抜くwpf開発1回目
Msを16倍出し抜くwpf開発1回目
cct-inc
WPF開発での陥りやすい罠
WPF開発での陥りやすい罠
Sho Okada
Wpfと非同期
Wpfと非同期
yone64
最速C# 7.x
最速C# 7.x
Yamamoto Reki
C#/WPFで作るデスクトップマスコット入門
C#/WPFで作るデスクトップマスコット入門
Fujikido
低レイヤー入門
低レイヤー入門
demuyan
未来(あす)Xamlの1msに泣かないために
未来(あす)Xamlの1msに泣かないために
Yutaka Tsumori
今さらWPF?いいえ、今こそWPF!
今さらWPF?いいえ、今こそWPF!
Yuya Yamaki
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
C#で速度を極めるいろは
C#で速度を極めるいろは
Core Concept Technologies
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
Yoshifumi Kawai
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Tetsuya Kaneuchi
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
Riderはいいぞ!
Riderはいいぞ!
UnityTechnologiesJapan002
MagicOnion入門
MagicOnion入門
torisoup
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
こわくない Git
こわくない Git
Kota Saito
帰宅部はじめました エクストリーム帰宅のすすめ
帰宅部はじめました エクストリーム帰宅のすすめ
cct-inc
勉強会 2015-02-04
勉強会 2015-02-04
cct-inc
Más contenido relacionado
La actualidad más candente
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
C#で速度を極めるいろは
C#で速度を極めるいろは
Core Concept Technologies
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
Yoshifumi Kawai
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Tetsuya Kaneuchi
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
Riderはいいぞ!
Riderはいいぞ!
UnityTechnologiesJapan002
MagicOnion入門
MagicOnion入門
torisoup
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
こわくない Git
こわくない Git
Kota Saito
La actualidad más candente
(20)
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
C#で速度を極めるいろは
C#で速度を極めるいろは
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
イベント・ソーシングを知る
イベント・ソーシングを知る
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Pythonによる黒魔術入門
Pythonによる黒魔術入門
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Riderはいいぞ!
Riderはいいぞ!
MagicOnion入門
MagicOnion入門
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
DockerコンテナでGitを使う
DockerコンテナでGitを使う
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
こわくない Git
こわくない Git
Más de cct-inc
帰宅部はじめました エクストリーム帰宅のすすめ
帰宅部はじめました エクストリーム帰宅のすすめ
cct-inc
勉強会 2015-02-04
勉強会 2015-02-04
cct-inc
勉強会 2014-12-11 (spain)
勉強会 2014-12-11 (spain)
cct-inc
レース観戦入門
レース観戦入門
cct-inc
201411 141204212906-conversion-gate01
201411 141204212906-conversion-gate01
cct-inc
141126 勉強会 xsdの活用
141126 勉強会 xsdの活用
cct-inc
プログラマへ送る電子工作基礎の基礎
プログラマへ送る電子工作基礎の基礎
cct-inc
OpenCVの入り口
OpenCVの入り口
cct-inc
「社会」から考える~社会学?のすすめ~
「社会」から考える~社会学?のすすめ~
cct-inc
Parser combinatorってなんなのさ
Parser combinatorってなんなのさ
cct-inc
Más de cct-inc
(10)
帰宅部はじめました エクストリーム帰宅のすすめ
帰宅部はじめました エクストリーム帰宅のすすめ
勉強会 2015-02-04
勉強会 2015-02-04
勉強会 2014-12-11 (spain)
勉強会 2014-12-11 (spain)
レース観戦入門
レース観戦入門
201411 141204212906-conversion-gate01
201411 141204212906-conversion-gate01
141126 勉強会 xsdの活用
141126 勉強会 xsdの活用
プログラマへ送る電子工作基礎の基礎
プログラマへ送る電子工作基礎の基礎
OpenCVの入り口
OpenCVの入り口
「社会」から考える~社会学?のすすめ~
「社会」から考える~社会学?のすすめ~
Parser combinatorってなんなのさ
Parser combinatorってなんなのさ
Último
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
Último
(8)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
Msを16倍出し抜くwpf開発2回目
1.
Microsoftを16倍出し抜く C#+WPF開発手法 第2回(1~4倍までの道)
山本礼貴
2.
誰のためか 対象者
C#と.NET Frameworkに対する大まかな知識を持つ人 WPFに対する大まかな知識を持つ人 第1回目のスライドをご覧いただいた人には、より効果的な 動機 WPFのプログラムの動作が遅いという懸念や不満
3.
頂上までの道 WPFの根本的問 題を解決する
(16倍~) WPF を制御する (4~16倍) WPFを効率的に使う (1~4倍) 誤った使い方をしないこと (~1倍)
4.
アジェンダ 16倍っていかほど? 仮想化パネル自作という道
ちょっとしたデモ まとめと次回予告
5.
16倍っていかほど? 大変に思えますが、実のところはそうでもない。 大体の16倍の根拠について。
6.
大前提 画面に収まらない規模のデータを扱うときの話です。 画面に収まる程度ものが遅いというのは何か別の問題と考え
ましょう。(例えば、第1回目で問題にしたようなこと)
7.
一般論で 考える 量的な面から物を減らしていくというアプローチは正しい。
データをグルーピングしたり絞り込んだりする。 遅延評価する。 表示を省略する。表示しないでいいUIを選択する。 (折りたたんだツリーとか) ただし、これらは多くの場合一覧性に対するアンチかも。 データ形式に特化されたアプローチの良し悪し 再利用性が低いので、毎回毎回やる羽目になります。 とはいえ、速くなることは間違いない。 システマチックなアプローチは大切です。 再利用ができるから。 簡素なコードが速く動くから。 他のアプローチと相乗効果が働くから。
8.
高速化を 座標軸で 考える
システマチックに考えてみましょう。 我々が認識できる軸は4つしかない 画面の平面(X軸、Y軸) コントロールの前後関係(Z軸) 描画に要する時間(時間軸) だったら、1軸あたり2倍の速度にできたら、2の4乗・・・ すなわち16倍。いけそうな気がする。 そのうち4倍を勝ち取る、画面の平面への最適化。 それは仮想化パネルそのものじゃないか!
9.
本日のお題 水平方向の 高速化
(1~4倍) 仮想化パネルって何するの? 仮想化パネルとは、画面外にあるものに対して、速度に影響し そうな処理を省略するパネルの事です。 例)画面内に入る前のコントロールを生成しない 例)画面外にあるコントロールをパネルから取り外す 例)使用の終わったコントロールをリサイクルする MicrosoftはVirtualizingStackPanelしか用意してくれていません。 この圧倒的な不足感は、自作するか、何かを買うしかなさそう です。 とりあえず、自作する路線にしましょう。 買ったものが遅かったとき理由がわかりません。 自分でメンテしているものなら大丈夫。
10.
仮想化パネル自作 という道 ひとまず簡単に作れる範囲から
11.
知っておくべ きこと ビジュアルツリーのことは多少知っておくと良い。
標準の仕様からどこまで離れることを許容しますか? 最小限、このくらいは変化します。 IsVisibleとか、VisualPanrentChangedのようなイベントが発生す るタイミングは変わります。 Loaded、Unloadedも変わります。 Childrenは「今表示されている子」のリストであり、所属して いる全ての子を表すようにならなくなります。 レイアウトパスの前に、画面外の要素を外したりする必要があ ります。 つまり、特定のイベント依存で処理をしてはいけません。 事前に読んでおくべきリファレンスコードはどこか ひとまず、Panel.csとFrameworkElement.csかな。
12.
高速化のため にすること 仮想化はパネルの責務です。でも、コントロールが協力的な
ら仮想化は高速です。 (専用のインターフェースくらいならあってもいいかなと思 える理由) まるで、すべてのコントロールが今までと同じように動かな ければいけないという考え方は捨てます。 (遅いものにいつまでもとらわれては速くなりません。) レイアウトパスを上手に活用して、適切なタイミングで画面 外のコントロールを低コスト化してやることです。
13.
ビジュアルツリーの 居場所はこのあたり ビジュアルツ
リーを知る イベント ユーザーコー ド バインディン グパス レイアウトパ ス 描画パス
14.
例) ボタンの ビジュアル
ツリー Button ClassicBorderDecorator (ボタンのスタイル) ContentPresenter (ボタンの中身) StackPanel Image TextBlock <Button> <StackPanel> <Image Source=“~.bmp” /> <TextBlock> ボタン <TextBlock/> </StackPanel> </Button> XAMLとイコールではあり ませんが、構造は近しいも のがあります。
15.
パネル側に 実装するもの 子を追加、削除するメソッド
Childrenとは別途管理します。 画面の表示範囲Viewportに応じてコントロールの着脱処理を 行います。
16.
ちょっとしたデモ 速度差の体感用です。が、あまり速くなった気がしな かったらごめんなさい。それは、次回以降のネタなので
す。
17.
違い 初期表示は数十倍は高速 マウスのあたり判定も数倍高速
スクロールはちょっと遅い?(←理由は後ほど) そんなことはいいから、ちょっとソースを見ましょうか。
18.
たった これだけで 仮想化
(パネル) Children候補を蓄積しといて Viewportに入ったら着脱
19.
たったこれだ けで(以下略) スッカスカです
20.
違反が あります 30分で書いたので、粗はごめんなさい。
実は1つ重大な違反してます。 ScrollChangedはレイアウトパス発のイベントです。そこで、 子の着脱をするということは、ユーザーコードのパス、バイ ンディングパスをやり直す可能性が生じます。 (第1回目であれほどダメだと言っていたのに) スクロールがさほど速くなっていなかったのはこれが理由で す。 仮想化しても思ったほど速くならんなーという人が悩むポイ ントでもあります。(重要)
21.
まとめと 次回予告 まとめ
仮想化パネルは水平方向の速度を向上します。 ただし、標準とは異なる挙動をするようになるため、いくつか の禁止事項が生じます。 速さが最も際立つのは、生成時とヒットテスト コントロールの着脱分、スクロールはちょっと遅くなります。 次回以降予告 コントロールのリサイクリングによって、省メモリと高速化を 同時に実現します。 Panelを継承するから発生する最大の問題について。 Zindex問題の解消方法。随一のトリッキーなパネル。
22.
ご清聴ありがとう ございました。 http://proprogrammer.hatenadiary.jp/
こちらもご覧ください。
Descargar ahora