SlideShare una empresa de Scribd logo
1 de 37
誰にでもできる
パフォーマンス・チューニング
Twitter: @kabakiyo
ブログ:遅咲きのエンジニア
Hokuriku.NETの代表
告知
3/10 Hokuriku.NET Vol9
• Windows Touch 入門から応用まで
  マイクロソフト 田中達彦さん

• OSSで作成するチーム開発環境
  石坂 忠広さん

• WindowsPhoneなら40日で30個のアプリが作れる!!
  西村 誠さん

• 復習シリーズ④「暗号化概説」
  ピアズ・マネジメント(株)中林秀仁・筏井哲治


                           http://atnd.org/events/24756
My アプリ




 IT勉強会カレンダー   Lost Friends
My ライブラリ
• Amazon Product Advertising API Signed Requests for
  Windows Phone
   http://amazonproductadvlib.codeplex.com/

• Application Undeployment
   http://undeployment.codeplex.com/

• エミュレータにPeopleハブを表示する方法
   http://d.hatena.ne.jp/kabakiyo/20111006/1317876504

• Windows Phone 7(Mango)でFlashlight、QRコード、
  AR(Augmented Reality)のサンプル
   http://d.hatena.ne.jp/kabakiyo/20110711/1310384889
本題
パフォーマンスを改善する目的
ユーザーは当たり前に動くことを期待している

パフォーマンスの悪いアプリケーションはその期待を裏
切っている

期待を裏切られたユーザーはストレスを感じる

他のアプリに浮気する

浮気したユーザーはなかなか戻ってこない

ユーザーにとって心地よいアプリを作り、
ユーザーの心をガッチリ掴む!
パフォーマンス・
チューニングは
プログラマーの腕
の見せ所!
改善すべき個所
• 起動時間
 起動が遅いとすぐに使いたいのに使えないイライ
 ラが溜まって精神衛生上よくない

• 応答時間
 押しても反応が遅いと押してないんじゃないかと
 勘違いして何度も押してしまい精神衛生上よくな
 い
パフォーマンスに関するサイト
• Windows Phone 用アプリケーションのパ
  フォーマンスに関する考慮事項(MSDN)
 http://msdn.microsoft.com/ja-
 jp/library/ff967560(v=vs.92).aspx

• 24 TWENTY FOUR: 24のパフォーマンス
  アップ Tips(MS 高橋忍さん)
 http://blogs.msdn.com/b/shintak/archive/2011/12/25/102
 50861.aspx
パフォーマンスに関する項目
•   JPG と PNG のどちらのイメージ形式を選択するか
•   イメージと XAML のどちらを選択するか
•   イメージ サイズの制限
•   メディアのビルド アクションを "コンテンツ" に設定する
•   Visibility と Opacity のどちらを選択するか
•   ProgressBarの代わりにPerformanceProgressBarを使用する
•   WebClient の代わりに HttpWebRequest を使用する
•   スプラッシュ スクリーンを使用する
•   アプリケーション アセンブリのサイズを最小にする
•   アプリケーションを小さいアセンブリに分割する
•   コンストラクターおよび Loaded イベントのコードを最小にする
•   分離ストレージの使用を監視する
•   UI スレッドのブロックを避ける
•   位置情報サービス
パフォーマンスに関する項目
•   プッシュ通知
•   ネットワーク情報
•   ラジオ
•   UI スレッド
•   合成スレッド
•   アニメーションとスレッド
•   バックグラウンド スレッドと非同期プログラミング
•   メモリ使用状況を監視する
•   再描画領域表示を有効にする
•   キャッシュ視覚化を有効にする
•   フィル レート上昇の要因
厳選された3つの項目
1. Resource or コンテンツ
2. ProgressBar → PerformanceProgressBar
3. WebClient → GZipWebClient
スペック(Samsung Omnia 7)

• Processor Qualcomm QSD8250 1GHz
• RAM 512MB
• ストレージ 8G
Resource or コンテンツ
説明              Resource or コンテンツ

 • 画像や動画などのリソースファイルをビルドす
   るときの扱い
 • プロパティのビルドアクションの設定
 • Resource、コンテンツ、なし
違い                   Resource or コンテンツ

 • Resource          zap
                           アセンブリ
     アセンブリに埋め込む


 • コンテンツ             zap
                           アセンブ
     アセンブリには埋め込まず、         リ
     パッケージに含む

 • なし                zap
                           アセンブ
     ビルドになにも含めない           リ
Resourceのデメリット                Resource or コンテンツ



 • 起動時にアセンブリを読み込むときに、
   まだ利用しないすべてのリソースが読み
   込まれる
 • 起動時間が遅くなる
  Resource              コンテンツ
   zap                  zap

         アセンブリ   リソース     アセンブリ       リソース
ベンチマーク             Resource or コンテンツ

 115MBの画像を含むプロジェクトをビルドした結果

  Resource         コンテンツ
結論           Resource or コンテンツ




 アセンブリに含めなければならない事情が
 ない限り、ビルドコンテンツは常にコンテ
 ンツで。
ProgressBar →
PerformanceProgressBar
説明                  ProgressBar → PerformanceProgressBar




 • プログラムがなんらかの処理中であることをお
   知らせするためのProgressBar
 • しかしそんなProgressBarに罠が…
ProgressBarの問題点        ProgressBar → PerformanceProgressBar




  • 標準で搭載されているProgressBarの
    IndeterminateモードはUIスレッドでアニメー
    ションを行っている
  • 他の処理をUIスレッドで行うとProgressBarの表
    示に影響を与えてしまう
  • それを解決するために作られたのが
    PerformanceProgressBar
  • PerformanceProgressBarは合成スレッドでアニ
    メーションを動かすようにした
検証内容                         ProgressBar → PerformanceProgressBar




以下の3つのタイプのプログレスバーに対し、UIスレッドに負
荷をかけたときの動作を検証。

1. SystemTrayの ProgressBar
2. コントロールのProgressBar
3. 改善されたPerformanceProgressBar
ベンチマーク           ProgressBar → PerformanceProgressBar




         3つのプログレスバーの表示を試すた
         めに、ビューに3つのプログレスバー
         を配置し、計算ボタンを押すとUIス
         レッドで重い処理が働くようにしまし
         た。




         コントロールのProgressBarだけ止ま
         る!
結論                           ProgressBar → PerformanceProgressBar



 • プログレスバーとは進捗状況を表示するため
   のものであるにもかかわらず、SDKに含まれ
   ているProgressBarはその役割を果たしてい
   ない
             (´・ω・`)
 • PerformanceProgressBarを積極的に使って
   いこう!
               ヾ(o´ω`o)ノ
 • Windows Phone Toolkitに入っています
         http://silverlight.codeplex.com/
WebClient → GZipWebClient
説明                                                  WebClient → GZipWebClient


 • GZipWebClientはgzip圧縮に対応したWebClient
 • GZipWebClient はWebClientから派生してるので、シグ
   ネチャはWebClientと一緒
 • 送信するデータ・受信するデータを圧縮できるのでデー
   タサイズが小さくなり処理時間が短くなることを期待で
   きる


 WebClient client = new SharpGIS.GZipWebClient();
 client.DownloadStringCompleted += client_DownloadStringCompleted;
 client.DownloadStringAsync(uri);
ベンチマーク                                    WebClient → GZipWebClient

http://d.hatena.ne.jp/kabakiyo/rss
の RSSを取得する処理

受信データ
                Header(bytes)    Body(bytes)        経過時間(ms)
WebClient       485              30.808             0.548
GZipWebClient   509              6,997              0.310




Bodyは約75%、経過時間は約45%の改善
ベンチマーク                                         WebClient → GZipWebClient

Please ship your next Windows Phone app with GZip:
speed requests 50-80%(Jeff Wilcox)




      http://www.jeff.wilcox.name/2012/01/windows-phone-gzip-support-by-morten/
結論                 WebClient → GZipWebClient




 • 圧縮率の高いHTML、XML、JSONのようなテキ
   ストデータでGZipWebClient は大きく力を発揮
   する
 • 一方、画像や動画などのバイナリデータで
   GZipWebClientを利用してもほとんど効果は見
   られない
ボツになった項目
• jpg or png
  jpgの方が速いけど10%ぐらい

• BitmapCache
  時と場合によってパフォーマンスに大きな影響を与える
  Opacityを設定するならBitmapCacheを設定したほうがよい

• スプラッシュスクリーンをはずす
  気分的なもの
  アプリケーションのロードがものすごく短ければはずしてもよい
  と思う
一般的な対策
• 起動時間を短くする
 – アセンブリを小さくする
 – コンストラクタ、Loaded、OnNavigatedToで重い処
   理をしない(重い処理はバックグラウンドで)

• 応答時間を短くする
 – UIスレッドで重い処理を行わない(重い処理はバッ
   クグラウンドで)
最後に…
浮気されないアプリを作ろう!
          by kabakiyo
参考
Windows Phone 用アプリケーションのパフォーマンスに関する考慮事項
http://msdn.microsoft.com/ja-jp/library/ff967560(v=vs.92).aspx
The high performance ProgressBar for Windows Phone
(“PerformanceProgressBar”)
 http://www.jeff.wilcox.name/2010/08/performanceprogressbar/
Please ship your next Windows Phone app with GZip: speed requests 50-80%
http://www.jeff.wilcox.name/2012/01/windows-phone-gzip-support-by-morten/
【WP for ITPro】Windows Phone エミュレーター のネットワークパケットを
キャプチャする
http://blogs.technet.com/b/junichia/archive/2011/12/01/3468284.aspx
【書籍】コードの世界 まつもとゆきひろ著
ご清聴ありがとうございました

Más contenido relacionado

La actualidad más candente

Webサーバ勉強会03
Webサーバ勉強会03Webサーバ勉強会03
Webサーバ勉強会03
oranie Narut
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
Takeshi Komiya
 

La actualidad más candente (20)

Re: WebServer BenchMarking
Re: WebServer BenchMarkingRe: WebServer BenchMarking
Re: WebServer BenchMarking
 
APACHE HTTP SERVER
APACHE HTTP SERVERAPACHE HTTP SERVER
APACHE HTTP SERVER
 
Webサーバ勉強会03
Webサーバ勉強会03Webサーバ勉強会03
Webサーバ勉強会03
 
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
 
Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形
 
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
 
PHP7実環境ベンチ2016春
PHP7実環境ベンチ2016春PHP7実環境ベンチ2016春
PHP7実環境ベンチ2016春
 
Embulkを活用したログ管理システム
Embulkを活用したログ管理システムEmbulkを活用したログ管理システム
Embulkを活用したログ管理システム
 
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
コンテナで作れるFaaS
コンテナで作れるFaaSコンテナで作れるFaaS
コンテナで作れるFaaS
 
OpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすOpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かす
 
Ppl
PplPpl
Ppl
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
Yesodを支える技術
Yesodを支える技術Yesodを支える技術
Yesodを支える技術
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
apachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin ServerっぽいやつをつくったapachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin Serverっぽいやつをつくった
 

Similar a 誰にでもできるパフォーマンスチューニング

DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
 
Play2実践tips集
Play2実践tips集Play2実践tips集
Play2実践tips集
takezoe
 

Similar a 誰にでもできるパフォーマンスチューニング (20)

DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 
Google Product
Google ProductGoogle Product
Google Product
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
 
Challenge PWA!! WordCamp Tokyo 2018
Challenge PWA!!  WordCamp Tokyo 2018Challenge PWA!!  WordCamp Tokyo 2018
Challenge PWA!! WordCamp Tokyo 2018
 
恋するJenkins
恋するJenkins恋するJenkins
恋するJenkins
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
 
Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要
 
JViews Diagrammer チュートリアル (JSF 2)
JViews Diagrammer チュートリアル (JSF 2)JViews Diagrammer チュートリアル (JSF 2)
JViews Diagrammer チュートリアル (JSF 2)
 
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_cccSpring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
 
Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2
 
PWA 総まとめ @ABC 2018 Spring
PWA 総まとめ @ABC 2018 SpringPWA 総まとめ @ABC 2018 Spring
PWA 総まとめ @ABC 2018 Spring
 
Zabbix 1.8の概要と新機能
Zabbix 1.8の概要と新機能Zabbix 1.8の概要と新機能
Zabbix 1.8の概要と新機能
 
Play2実践tips集
Play2実践tips集Play2実践tips集
Play2実践tips集
 
Web frontend performance tuning
Web frontend      performance tuningWeb frontend      performance tuning
Web frontend performance tuning
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト
 
Azure 高速サイトソリューション
Azure 高速サイトソリューションAzure 高速サイトソリューション
Azure 高速サイトソリューション
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
スマートフォンWebアプリ最適化”3つの極意”
スマートフォンWebアプリ最適化”3つの極意”スマートフォンWebアプリ最適化”3つの極意”
スマートフォンWebアプリ最適化”3つの極意”
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 

Más de Kiyokazu Kaba (8)

プログラマーのための色彩 #1
プログラマーのための色彩 #1プログラマーのための色彩 #1
プログラマーのための色彩 #1
 
Windows phone apps 開発秘話
Windows phone apps 開発秘話Windows phone apps 開発秘話
Windows phone apps 開発秘話
 
Windows phoneのバックグラウンドエージェントについて
Windows phoneのバックグラウンドエージェントについてWindows phoneのバックグラウンドエージェントについて
Windows phoneのバックグラウンドエージェントについて
 
Windows Phone 7の概要と特徴
Windows Phone 7の概要と特徴Windows Phone 7の概要と特徴
Windows Phone 7の概要と特徴
 
Xnaの基本
Xnaの基本Xnaの基本
Xnaの基本
 
.NETでもARできるよ!
.NETでもARできるよ!.NETでもARできるよ!
.NETでもARできるよ!
 
Hokuriku.lang
Hokuriku.langHokuriku.lang
Hokuriku.lang
 
Webサーバーの構築
Webサーバーの構築Webサーバーの構築
Webサーバーの構築
 

Último

Último (12)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

誰にでもできるパフォーマンスチューニング

  • 3. 告知 3/10 Hokuriku.NET Vol9 • Windows Touch 入門から応用まで マイクロソフト 田中達彦さん • OSSで作成するチーム開発環境 石坂 忠広さん • WindowsPhoneなら40日で30個のアプリが作れる!! 西村 誠さん • 復習シリーズ④「暗号化概説」 ピアズ・マネジメント(株)中林秀仁・筏井哲治 http://atnd.org/events/24756
  • 5. My ライブラリ • Amazon Product Advertising API Signed Requests for Windows Phone http://amazonproductadvlib.codeplex.com/ • Application Undeployment http://undeployment.codeplex.com/ • エミュレータにPeopleハブを表示する方法 http://d.hatena.ne.jp/kabakiyo/20111006/1317876504 • Windows Phone 7(Mango)でFlashlight、QRコード、 AR(Augmented Reality)のサンプル http://d.hatena.ne.jp/kabakiyo/20110711/1310384889
  • 9. 改善すべき個所 • 起動時間 起動が遅いとすぐに使いたいのに使えないイライ ラが溜まって精神衛生上よくない • 応答時間 押しても反応が遅いと押してないんじゃないかと 勘違いして何度も押してしまい精神衛生上よくな い
  • 10. パフォーマンスに関するサイト • Windows Phone 用アプリケーションのパ フォーマンスに関する考慮事項(MSDN) http://msdn.microsoft.com/ja- jp/library/ff967560(v=vs.92).aspx • 24 TWENTY FOUR: 24のパフォーマンス アップ Tips(MS 高橋忍さん) http://blogs.msdn.com/b/shintak/archive/2011/12/25/102 50861.aspx
  • 11. パフォーマンスに関する項目 • JPG と PNG のどちらのイメージ形式を選択するか • イメージと XAML のどちらを選択するか • イメージ サイズの制限 • メディアのビルド アクションを "コンテンツ" に設定する • Visibility と Opacity のどちらを選択するか • ProgressBarの代わりにPerformanceProgressBarを使用する • WebClient の代わりに HttpWebRequest を使用する • スプラッシュ スクリーンを使用する • アプリケーション アセンブリのサイズを最小にする • アプリケーションを小さいアセンブリに分割する • コンストラクターおよび Loaded イベントのコードを最小にする • 分離ストレージの使用を監視する • UI スレッドのブロックを避ける • 位置情報サービス
  • 12. パフォーマンスに関する項目 • プッシュ通知 • ネットワーク情報 • ラジオ • UI スレッド • 合成スレッド • アニメーションとスレッド • バックグラウンド スレッドと非同期プログラミング • メモリ使用状況を監視する • 再描画領域表示を有効にする • キャッシュ視覚化を有効にする • フィル レート上昇の要因
  • 13. 厳選された3つの項目 1. Resource or コンテンツ 2. ProgressBar → PerformanceProgressBar 3. WebClient → GZipWebClient
  • 14. スペック(Samsung Omnia 7) • Processor Qualcomm QSD8250 1GHz • RAM 512MB • ストレージ 8G
  • 16. 説明 Resource or コンテンツ • 画像や動画などのリソースファイルをビルドす るときの扱い • プロパティのビルドアクションの設定 • Resource、コンテンツ、なし
  • 17. 違い Resource or コンテンツ • Resource zap アセンブリ アセンブリに埋め込む • コンテンツ zap アセンブ アセンブリには埋め込まず、 リ パッケージに含む • なし zap アセンブ ビルドになにも含めない リ
  • 18. Resourceのデメリット Resource or コンテンツ • 起動時にアセンブリを読み込むときに、 まだ利用しないすべてのリソースが読み 込まれる • 起動時間が遅くなる Resource コンテンツ zap zap アセンブリ リソース アセンブリ リソース
  • 19. ベンチマーク Resource or コンテンツ 115MBの画像を含むプロジェクトをビルドした結果 Resource コンテンツ
  • 20. 結論 Resource or コンテンツ アセンブリに含めなければならない事情が ない限り、ビルドコンテンツは常にコンテ ンツで。
  • 22. 説明 ProgressBar → PerformanceProgressBar • プログラムがなんらかの処理中であることをお 知らせするためのProgressBar • しかしそんなProgressBarに罠が…
  • 23. ProgressBarの問題点 ProgressBar → PerformanceProgressBar • 標準で搭載されているProgressBarの IndeterminateモードはUIスレッドでアニメー ションを行っている • 他の処理をUIスレッドで行うとProgressBarの表 示に影響を与えてしまう • それを解決するために作られたのが PerformanceProgressBar • PerformanceProgressBarは合成スレッドでアニ メーションを動かすようにした
  • 24. 検証内容 ProgressBar → PerformanceProgressBar 以下の3つのタイプのプログレスバーに対し、UIスレッドに負 荷をかけたときの動作を検証。 1. SystemTrayの ProgressBar 2. コントロールのProgressBar 3. 改善されたPerformanceProgressBar
  • 25. ベンチマーク ProgressBar → PerformanceProgressBar 3つのプログレスバーの表示を試すた めに、ビューに3つのプログレスバー を配置し、計算ボタンを押すとUIス レッドで重い処理が働くようにしまし た。 コントロールのProgressBarだけ止ま る!
  • 26. 結論 ProgressBar → PerformanceProgressBar • プログレスバーとは進捗状況を表示するため のものであるにもかかわらず、SDKに含まれ ているProgressBarはその役割を果たしてい ない (´・ω・`) • PerformanceProgressBarを積極的に使って いこう! ヾ(o´ω`o)ノ • Windows Phone Toolkitに入っています http://silverlight.codeplex.com/
  • 28. 説明 WebClient → GZipWebClient • GZipWebClientはgzip圧縮に対応したWebClient • GZipWebClient はWebClientから派生してるので、シグ ネチャはWebClientと一緒 • 送信するデータ・受信するデータを圧縮できるのでデー タサイズが小さくなり処理時間が短くなることを期待で きる WebClient client = new SharpGIS.GZipWebClient(); client.DownloadStringCompleted += client_DownloadStringCompleted; client.DownloadStringAsync(uri);
  • 29. ベンチマーク WebClient → GZipWebClient http://d.hatena.ne.jp/kabakiyo/rss の RSSを取得する処理 受信データ Header(bytes) Body(bytes) 経過時間(ms) WebClient 485 30.808 0.548 GZipWebClient 509 6,997 0.310 Bodyは約75%、経過時間は約45%の改善
  • 30. ベンチマーク WebClient → GZipWebClient Please ship your next Windows Phone app with GZip: speed requests 50-80%(Jeff Wilcox) http://www.jeff.wilcox.name/2012/01/windows-phone-gzip-support-by-morten/
  • 31. 結論 WebClient → GZipWebClient • 圧縮率の高いHTML、XML、JSONのようなテキ ストデータでGZipWebClient は大きく力を発揮 する • 一方、画像や動画などのバイナリデータで GZipWebClientを利用してもほとんど効果は見 られない
  • 32. ボツになった項目 • jpg or png jpgの方が速いけど10%ぐらい • BitmapCache 時と場合によってパフォーマンスに大きな影響を与える Opacityを設定するならBitmapCacheを設定したほうがよい • スプラッシュスクリーンをはずす 気分的なもの アプリケーションのロードがものすごく短ければはずしてもよい と思う
  • 33. 一般的な対策 • 起動時間を短くする – アセンブリを小さくする – コンストラクタ、Loaded、OnNavigatedToで重い処 理をしない(重い処理はバックグラウンドで) • 応答時間を短くする – UIスレッドで重い処理を行わない(重い処理はバッ クグラウンドで)
  • 36. 参考 Windows Phone 用アプリケーションのパフォーマンスに関する考慮事項 http://msdn.microsoft.com/ja-jp/library/ff967560(v=vs.92).aspx The high performance ProgressBar for Windows Phone (“PerformanceProgressBar”) http://www.jeff.wilcox.name/2010/08/performanceprogressbar/ Please ship your next Windows Phone app with GZip: speed requests 50-80% http://www.jeff.wilcox.name/2012/01/windows-phone-gzip-support-by-morten/ 【WP for ITPro】Windows Phone エミュレーター のネットワークパケットを キャプチャする http://blogs.technet.com/b/junichia/archive/2011/12/01/3468284.aspx 【書籍】コードの世界 まつもとゆきひろ著