SlideShare une entreprise Scribd logo
1  sur  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
【書籍】コードの世界 まつもとゆきひろ著
ご清聴ありがとうございました

Contenu connexe

Tendances

Re: WebServer BenchMarking
Re: WebServer BenchMarkingRe: WebServer BenchMarking
Re: WebServer BenchMarkingRyo Tomidokoro
 
Webサーバ勉強会03
Webサーバ勉強会03Webサーバ勉強会03
Webサーバ勉強会03oranie Narut
 
【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 移行を決めた話Yuki Kanazawa
 
Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形Shinji Tanaka
 
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料Masahiro Haraoka
 
PHP7実環境ベンチ2016春
PHP7実環境ベンチ2016春PHP7実環境ベンチ2016春
PHP7実環境ベンチ2016春Ryo Tomidokoro
 
Embulkを活用したログ管理システム
Embulkを活用したログ管理システムEmbulkを活用したログ管理システム
Embulkを活用したログ管理システムAkihiro Ikezoe
 
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~真乙 九龍
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツールtotty jp
 
コンテナで作れるFaaS
コンテナで作れるFaaSコンテナで作れるFaaS
コンテナで作れるFaaS真吾 吉田
 
OpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすOpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすKUNITO Atsunori
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015Masahiro Nagano
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacTakeshi Komiya
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化dcubeio
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
Yesodを支える技術
Yesodを支える技術Yesodを支える技術
Yesodを支える技術Hiromi Ishii
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
apachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin ServerっぽいやつをつくったapachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin ServerっぽいやつをつくったJunichi Ishida
 

Tendances (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っぽいやつをつくった
 

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

DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminarManabu Shimobe
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -Yukihiko SAWANOBORI
 
Challenge PWA!! WordCamp Tokyo 2018
Challenge PWA!!  WordCamp Tokyo 2018Challenge PWA!!  WordCamp Tokyo 2018
Challenge PWA!! WordCamp Tokyo 2018Ryu Shindo
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていくRyo Mitoma
 
Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Masaru Horioka
 
JViews Diagrammer チュートリアル (JSF 2)
JViews Diagrammer チュートリアル (JSF 2)JViews Diagrammer チュートリアル (JSF 2)
JViews Diagrammer チュートリアル (JSF 2)RWSJapan
 
Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2Hitoshi Yoshida
 
PWA 総まとめ @ABC 2018 Spring
PWA 総まとめ @ABC 2018 SpringPWA 総まとめ @ABC 2018 Spring
PWA 総まとめ @ABC 2018 SpringRyu Shindo
 
Zabbix 1.8の概要と新機能
Zabbix 1.8の概要と新機能Zabbix 1.8の概要と新機能
Zabbix 1.8の概要と新機能Kodai Terashima
 
Play2実践tips集
Play2実践tips集Play2実践tips集
Play2実践tips集takezoe
 
Web frontend performance tuning
Web frontend      performance tuningWeb frontend      performance tuning
Web frontend performance tuningssuser3c214d
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト健一 辰濱
 
Azure 高速サイトソリューション
Azure 高速サイトソリューションAzure 高速サイトソリューション
Azure 高速サイトソリューションHiromasa Oka
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
スマートフォンWebアプリ最適化”3つの極意”
スマートフォンWebアプリ最適化”3つの極意”スマートフォンWebアプリ最適化”3つの極意”
スマートフォンWebアプリ最適化”3つの極意”Koji Ishimoto
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話JustSystems Corporation
 

Similaire à 誰にでもできるパフォーマンスチューニング (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 で動かしている話
 

Plus de Kiyokazu Kaba

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

Plus 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サーバーの構築
 

Dernier

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Dernier (9)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

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

  • 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 【書籍】コードの世界 まつもとゆきひろ著