Advertisement
Advertisement

More Related Content

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

Advertisement

Recently uploaded(20)

Advertisement

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

  1. 誰にでもできる パフォーマンス・チューニング
  2. Twitter: @kabakiyo ブログ:遅咲きのエンジニア Hokuriku.NETの代表
  3. 告知 3/10 Hokuriku.NET Vol9 • Windows Touch 入門から応用まで マイクロソフト 田中達彦さん • OSSで作成するチーム開発環境 石坂 忠広さん • WindowsPhoneなら40日で30個のアプリが作れる!! 西村 誠さん • 復習シリーズ④「暗号化概説」 ピアズ・マネジメント(株)中林秀仁・筏井哲治 http://atnd.org/events/24756
  4. My アプリ IT勉強会カレンダー Lost Friends
  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
  6. 本題
  7. パフォーマンスを改善する目的 ユーザーは当たり前に動くことを期待している パフォーマンスの悪いアプリケーションはその期待を裏 切っている 期待を裏切られたユーザーはストレスを感じる 他のアプリに浮気する 浮気したユーザーはなかなか戻ってこない ユーザーにとって心地よいアプリを作り、 ユーザーの心をガッチリ掴む!
  8. パフォーマンス・ チューニングは プログラマーの腕 の見せ所!
  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
  15. Resource or コンテンツ
  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 コンテンツ アセンブリに含めなければならない事情が ない限り、ビルドコンテンツは常にコンテ ンツで。
  21. ProgressBar → PerformanceProgressBar
  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/
  27. WebClient → GZipWebClient
  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スレッドで重い処理を行わない(重い処理はバッ クグラウンドで)
  34. 最後に…
  35. 浮気されないアプリを作ろう! by kabakiyo
  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 【書籍】コードの世界 まつもとゆきひろ著
  37. ご清聴ありがとうございました
Advertisement