共用方式為


本文章是由機器翻譯。

Windows Phone

使 Windows Phone 應用程式更快推出市集

Cheryl Simmons

Windows Phone SDK 7.1 包含一些卓爾不凡的工具,可用於在將面向 Windows Phone 7.5 的應用程式推向市場之前評估應用程式是否符合認證標準和提升性能。在本文中,我將通過示例應用程式引導你使用市場測試工具包和性能分析工具,並展示如何使用這些工具來評估你的應用程式是否已準備好推向市場。我還將演示如何使用這些工具提供的資料來改進應用程式,以便應用程式在第一次試發行時便能獲得市場認可。有關市場認證要求的詳細資訊,請參閱 MSDN 庫文章“Windows Phone 應用程式認證要求”(wpdev.ms/certreq)。

Windows Phone SDK 7.1 中包含了本文所用的全部工具,可以從 wpdev.ms/wpsdk71rtw 下載它。

示例應用程式和測試工具

為了練習使用市場測試工具包和性能分析工具,我創建了一個名為“Examine the Stamen”的示例應用程式,這是一個簡單的鮮花識別應用程式。我為我的母親創建了這個應用程式;她可以使用這個應用程式來提高辨認鮮花的能力。這個應用程式的開始螢幕上將顯示多張較小的鮮花圖片。使用者點擊鮮花後,應用程式將導航到另一個頁面,其中顯示所選鮮花的較大圖片。再次點擊該圖片,訊息方塊中將顯示鮮花的名稱。圖 1 顯示了在應用程式中導航時顯示的圖像。(另外,我使用的是 Windows Phone Emulator 中的新螢幕擷取畫面工具來獲取這些螢幕擷取畫面。有關詳細資訊,請參閱 MSDN 庫文章“操作方法:為 Windows Phone Marketplace 創建螢幕擷取畫面”(wpdev.ms/rYoZKP))。

圖 1 Examine the Stamen 程式中顯示的圖像

雖然此應用程式並不完全屬實,不過也體現了合理的手機應用程式導航模型。我將在 Visual Studio 中使用市場測試工具包評估此應用程式,然後使用 Windows Phone 性能分析工具進一步檢查。在發現任何問題之後,我將使用文檔資源來判斷如何修復這些問題,然後使用工具重新進行測試。

我們現在開始吧。

使用市場測試工具包

我已經為 Examine the Stamen 創建了頗具吸引力的 UI 和合理的導航模型。我打算在以後添加更多鮮花,不過現在則希望儘快將應用程式推向市場。對我而言,下一步是使用市場測試工具包,通過自動化、監視和手動測試套件來評估應用程式是否可以推向市場。

為了運行測試,我在 Visual Studio 中打開應用程式,然後在“專案”功能表上選擇“市場測試工具包”。

此時將在 Visual Studio 中打開一個新選項卡,其中顯示了市場測試工具包測試套件。圖 2 顯示了該的測試工具包的第一頁。

****
圖 2 Visual Studio 中市場測試工具包的第一頁****

可用的測試套件顯示在左側的選項卡中。使用“應用程式詳細資訊”選項卡可以指定用於自動測試的應用程式圖像。自動測試評估應用程式 XAP 大小、插圖和螢幕擷取畫面是否符合認證要求,並確定應用程式所使用的資源數量。手動測試則提供了引導你使用應用程式的步驟,並確保應用程式符合附加的認證標準。

在本文中,我將重點介紹監視測試。有關所有四種測試套件的詳細資訊,請參閱“Windows Phone 市場測試工具包”MSDN 庫頁 (wpdev.ms/toHcRb)。

監視測試套件評估應用程式是否符合重要的認證標準,例如:

  • 啟動時間
  • 應用程式尖峰記憶體使用量
  • “後退”按鈕處理
  • 由於未處理的異常造成的應用程式突然退出

運行監視測試

要運行監視測試,需要啟動應用程式的發行版本、將其部署到設備上(該測試在模擬器上無法工作)並在應用程式中流覽。配置此項的選項位於 Visual Studio 中的“標準”工具列上。運行監視測試的目標是按照應用程式使用者的方式流覽應用程式,練習流覽到所有可能的流覽路徑。執行這些操作時,測試工具包將監視應用程式並收集相關資料。

通過監視測試對應用程式進行測試時,還需要測試應用程式在終止後短時間內重新啟動的性能。This termination and reactivation process is called “tombstoning.” In Windows Phone 7.5, your application will go dormant automatically before it’s tombstoned.

要強制應用程式立即執行邏輯刪除以進行調試和測試,請在“專案”屬性的“調試”選項卡上選擇“調試期間在停用後進入邏輯刪除狀態”選項。在“專案”功能表上選擇“屬性”以打開專案屬性。圖 3 顯示選中了此選項。有關邏輯刪除的詳細資訊,請參閱“Windows Phone 執行模型概覽”MSDN 庫頁 (wpdev.ms/ExMod)。

圖 3 在專案屬性中選擇選項以測試邏輯刪除

配置這些選項之後,我將返回“市場測試工具包”選項卡。接入開發人員註冊的設備,在測試工具包的“監視測試”頁上按一下“啟動應用程式”。

應用程式啟動後,我將來回流覽、選擇鮮花、點擊名稱和按一下“後退”按鈕以返回應用程式的開始頁。點擊“開始”按鈕,然後點擊“後退”按鈕以強制應用程式執行邏輯刪除並返回。

當我覺得已經按照使用者的通常使用方式流覽並且已執行邏輯刪除和重新啟動了應用程式之後,我可以停止應用程式和測試會話。為了實現最佳結果,我在應用程式的開始頁上按一下“後退”按鈕以結束測試會話,從而退出應用程式。然後,可以在測試工具包中按一下“監視測試”頁上的“關閉應用程式”按鈕,不過,為了得到最準確的測試結果,我使用“後退”按鈕退出應用程式。應用程式退出時,監視會話結束。

測試會話結束後,測試工具包的結果狀態列中將顯示套件正在分析結果,分析完成後將更新結果表。

圖 4 中顯示的應用程式結果讓我感到震驚。

圖 4 測試結果顯示兩處失敗

在這個測試套件的四項測試中,我的應用程式有兩處失敗。啟動時間太長並且使用的記憶體過多。我決定進行進一步研究。

Using the Performance Analysis Tool

一般而言,要想讓應用程式在市場上受到歡迎,應用程式必須性能優秀,回應迅速。至少,你應該研究並修復測試工具包所確定的性能問題。對於上述任意一種情形,你都可以使用 Windows Phone 性能分析工具(也稱為分析器)。

現在我關閉測試工具包,並決定使用分析器來查看啟動時間和記憶體問題。這是一個很好的工具,它可以顯示應用程式的潛在問題以及更正這些問題的可能處理方法。

分析器有兩個選項:

  • 執行分析:執行分析器將評估應用程式的畫面播放速率、CPU 使用率和一般記憶體使用情況。你可以使用該工具深入研究填充速率、創建了多少個畫面以及可能影回應用程式性能的其他執行詳細資訊。
  • 記憶體分析:記憶體分析器顯示記憶體使用情況、圖像載入以及垃圾收集事件。使用記憶體分析器可以查看記憶體使用趨勢,這可以指示記憶體洩漏情況。

除非你確定應用程式僅存在記憶體問題,否則請選擇執行分析器。我知道存在記憶體問題,但又非常關注啟動時間問題,因此我決定首先使用執行分析器查看我的應用程式。

在 Visual Studio 中打開應用程式後,轉到“調試”功能表,然後選擇“啟動 Windows Phone 性能分析”。(Note:如果你使用的是 Visual Studio Premium 或 Ultimate,請不要選擇“啟動性能分析”,此選項不適用於手機專案。)

打開性能分析工具之後,Visual Studio 中將顯示帶有當前分析會話名稱的新選項卡。該名稱包括專案的名稱以及分析會話的日期/時間,其後為 .sap 尾碼,用於分析結果檔。這些檔始終保存在專案中,因此可以反復查看。圖 5 顯示了在運行任何測試之前的“性能分析”選項卡。

圖 5 運行任何測試之前的“性能分析”選項卡

在分析器選項卡上,我選擇了“執行”選項。為了獲得最佳結果,確保在 Visual Studio 工具列上的部署和調試選項框中仍選擇了“Windows Phone 設備和版本”,並確保設備已接入且未鎖定。(Note:使用分析器時,可以將應用程式部署到模擬器上,但結果無法指示設備性能。)

按一下“啟動應用程式”以啟動分析會話。與市場測試工具包類似,我按照使用者的方法使用應用程式,確保執行了邏輯刪除並至少返回一次應用程式。使用“後退”按鈕退出應用程式,要獲得最準確的結果,建議使用這種方法,不過你也可以使用性能分析工具中的“停止分析”選項來結束分析會話。分析器會耗費一些時間來分析結果,並以圖形格式將結果顯示在頁面上(如圖 6 所示)。結果非常有趣。

圖 6 性能分析測試結果

圖形中 CPU 使用情況的綠色部分表示螢幕更新和觸碰輸入。可以看到,最初 CPU 使用率很高,由於啟動時間緩慢,這不足為奇。還可以看到,在載入圖像時也顯示了很高的 CPU 使用峰值,並且記憶體使用不斷攀升。查看這些結果,無需進一步檢查,我便可以知道記憶體使用問題可能與應用程式中的影像處理方式相關。雖然此圖形表明,應用程式退出時將釋放使用的所有記憶體,但是我還是擔心,如果應用程式長時間運行而不是像測試中這樣運行短短幾秒,這可能會造成設備崩潰。

現在,重新運行性能分析工具,並選中記憶體選項,這可以確認我的記憶體使用不斷增長的問題。

查找並修復問題

要使用分析工具跟蹤問題,請在圖形中選擇問題區域,然後在“觀察摘要”部分中查看說明。

在執行分析器結果中,按一下並拖動滑鼠以選擇顯示 CPU 使用峰值的圖形部分。此時將立即更新“性能警告”部分,其中顯示需要研究的問題(請參見圖 7)。

圖 7 關於 UI 執行緒的高 CPU 使用率性能警告

根據“觀察摘要”,應用程式使用了大量 CPU 來執行 UI 執行緒上的函數。這顯然會導致啟動時間緩慢和整體性能低下,但我不確定這是否會造成記憶體問題。分析器的優點在於它提供了一些跟蹤說明,因此,我將進行跟蹤。依次選擇“CPU 使用率”和“函數”。結果表隨即更新,我按“包含樣本 %”列對結果進行排序。此時將以藍色顯示我的應用程式函式呼叫,並帶有包含命名空間(在本例中可能為 MemoryLeak)、類和方法名的完全限定名。此外,函式呼叫是指向代碼中的方法的活動連結。圖 8 顯示了這些結果。

****
圖 8 性能分析工具顯示可能導致問題的方法****

通過查看這些結果,我可以確定在載入第二個頁面時執行的方法使用了大量 CPU。這可能不會修復啟動時間的問題,但絕對可以改善記憶體問題。

按一下連結以查看 FlowerPage.OnNavigatedTo 方法。此方法創建了鮮花物件清單,並使用 LoadBitmap 方法為每朵鮮花載入一張點陣圖。以下是對 LoadBitmap 方法的典型調用:

bitmap = LoadBitmap("/MemoryLeak;component/Images/tulip.jpg");

以及載入資源的 LoadBitmap 方法:

private BitmapImage LoadBitmap(string urlString)
{
  var streaminfo = App.GetResourceStream(new Uri(urlString, UriKind.Relative)); 
  BitmapImage bitmap = new BitmapImage();
  bitmap.SetSource(streaminfo.Stream);
  return bitmap;
}

使用者導航到此頁面時,我提取在導航 URI 中的主頁上按一下的鮮花的名稱,並在 FlowerPage 上載入相同的鮮花圖像。

很明顯,載入圖像導致了記憶體問題,但我並不確定我應當執行哪些操作。

如果“觀察摘要”沒有提供足夠的資訊來解決應用程式中的性能問題,你應該查看 MSDN 和 Web 以尋求性能指導。 下麵提供了一些很有用的資源:

  • “Windows Phone 應用程式的性能注意事項”(位於“介質”部分下)(wpdev.ms/utCq6h)
  • “Windows Phone 的性能技術”(wpdev.ms/perfTech)
  • Silverlight for Windows Phone 性能團隊博客 (wpdev.ms/slmperf)
  • 分析和改進 Windows Phone 應用程式性能(來自 MIX11 的視頻)(wpdev.ms/mixwpperf)
  • 專家課程:構建成功 Windows Phone 應用程式的關鍵技巧(來自 MIX11 的視頻)(wpdev.ms/mixwptoptips)

我開始研究性能並在手機應用程式中載入資源,然後發現了一些嚴重問題。 根據“介質”部分下“Windows Phone 應用程式的性能注意事項”MSDN 庫文章的內容,我應該將影像檔指定為內容而非資源,因為手機已進行優化可以使用檔。 將介質檔作為資源編譯時,內容將在使用之前複製到檔中,這會降低性能。

我將影像檔的生成操作更改為“內容”,然後對代碼進行了相應細微改動。

在 LoadBitmap 方法中,指定 BitmapImage 的 UriSource 而非調用 SetSource:

private BitmapImage LoadBitmap(string urlString)
{
  BitmapImage bitmap = new BitmapImage();
  bitmap.UriSource = new Uri(urlString, UriKind.Relative);
  return bitmap;
}

調用 LoadBitmap 時,將相對 URL 傳遞給每個點陣圖:

bitmap = LoadBitmap("/Images/tulip.jpg");

重新運行測試工具包和性能分析工具

在修復市場測試工具包和性能分析工具中發現的問題之後,你可以重新運行這些工具。

我重新編譯應用程式,然後再次運行市場測試工具包,結果中的差別簡直令人難以置信(請參見圖 9)。應用程式現在通過了所有四項測試。啟動時間並不是很讓人滿意,但至少達標了。


圖 9 更改影像處理方式導致通過所有四項市場測試

最後一次運行執行分析器。可以看到結果發生了顯著變化(請參見圖 10)。


圖 10 更改影像處理方式改善 CPU 和記憶體性能分析結果

現在,使用者在不同頁面之間流覽時,不會再出現極高的 CPU 峰值,並且無需反復載入圖像,而只需在應用程式啟動時載入一次圖像即可。我們還可以從圖形看出,應用程式的記憶體使用保持穩定,並且比應用程式以前的版本要低。接下來,我選擇一些較小的 CPU 峰值,結果隨即在圖 11 中顯示。


圖 11 研究 CPU 峰值未顯示任何性能警告

分析器未顯示任何性能問題,這樣我就放心了,我開始計畫將應用程式推向市場。我相信該應用程式一定會得到大家的認可,並且我可以根據需要改進應用程式和提交更新。

Follow This Pattern

在本文中,我介紹了如何使用市場測試工具包和性能分析工具來確定和修復示例 Windows Phone 應用程式中的問題。這些工具已集成到 Visual Studio 中,並作為 Windows Phone SDK 的一部分安裝。市場測試工具包可説明你確定應用程式是否滿足認證要求。性能分析工具則説明你確定記憶體和 CPU 性能問題。在向市場推出應用程式之前,建議你採用本文中演示的類似模式:

  1. 使用我演示的工具,包括市場測試工具包內含的所有測試套件。
  2. 確定並修復所有問題。
  3. 重新測試以確認修復情況。

如果遵循此模式,你可以儘早發現問題,並可以更快地創建更卓越的應用程式。此外,這也有助於確保你的應用程式在第一次試發行時就得到市場的認可。

Cheryl Simmons* 是 Microsoft Windows Phone* 開發人員內容團隊的高級程式師。 

衷心感謝以下技術專家對本文進行了審閱:Pratap LakshmanRaghuram LankaNitin Madnikar