Windows Phone

Coloque seus aplicativos para Windows Phone no mercado com mais rapidez

Cheryl Simmons

O Windows Phone SDK 7.1 inclui algumas boas ferramentas para avaliar a aderência às diretrizes de certificação e para melhorar o desempenho de seus aplicativos para Windows Phone 7.5, antes da colocação no mercado. Neste artigo, descreverei o uso do Marketplace Test Kit e da ferramenta de análise de desempenho em um aplicativo de exemplo e mostrarei como é possível usar essas ferramentas para avaliar a preparação de seu aplicativo para o mercado. Mostrarei como usar os dados das ferramentas para fazer melhorias que ajudarão a obter aceitação de seu aplicativo no mercado na primeira tentativa. Para obter mais informações sobre os requisitos de certificação do mercado, consulte o artigo da Biblioteca MSDN sobre os requisitos da certificação de aplicativos para Windows Phone (wpdev.ms/certreq).

Todas as ferramentas usadas neste artigo estão incluídas no Windows Phone SDK 7.1, que pode ser obtido em wpdev.ms/wpsdk71rtw.

Aplicativo de exemplo e ferramentas de teste

Para experimentar o Marketplace Test Kit e a ferramenta de análise de desempenho, criei um aplicativo de exemplo chamado Examine the Stamen, um aplicativo simples para identificação de flores. Criei-o pensando em minha mãe, ela poderá usá-lo para melhorar suas habilidades de identificação de flores. O aplicativo exibe várias imagens pequenas de flores na tela inicial. Um usuário toca em uma flor e o aplicativo navega para outra página onde uma imagem maior da flor selecionada é exibida. Com outro toque, o nome da flor é exibido em uma MessageBox. A Figura 1 mostra as imagens exibidas à medida que navego pelo aplicativo. Como uma anotação rápida, usei a nova ferramenta de captura de tela do Windows Phone Emulator para essas capturas de tela. Para obter mais informações, consulte o artigo da Biblioteca MSDN sobre como criar capturas de tela para Windows Phone Marketplace (wpdev.ms/rYoZKP).

Images Displayed in the Examine the Stamen ProgramFigura 1 Imagens exibidas no programa Examine the Stamen

Embora este aplicativo não represente exatamente o mundo real, ele representa um modelo de navegação razoável para um aplicativo para telefone. Avaliarei este aplicativo usando o Marketplace Test Kit no Visual Studio e, em seguida, irei examiná-lo adicionalmente com a ferramenta Windows Phone Performance Analysis. Ao identificar qualquer problema, usarei os recursos da documentação para descobrir como corrigir os problemas e testarei novamente com as ferramentas.

Vamos começar.

Usando o Marketplace Test Kit

Criei uma interface do usuário razoavelmente atraente para o Examine the Stamen e um modelo de navegação razoável. Planejo adicionar mais flores no futuro, mas agora quero colocar meu aplicativo no mercado. Minha próxima etapa é usar o Marketplace Test Kit para avaliar a preparação de meu aplicativo para o mercado com um conjunto de testes automatizados, monitorados e manuais.

Para executar os testes, abro meu projeto de aplicativo no Visual Studio e seleciono “Marketplace Test Kit” no menu Project.

Uma nova guia é aberta no Visual Studio exibindo os conjuntos de testes do Marketplace Test Kit. A Figura 2 mostra a primeira página do kit de testes.

The First Page of the Marketplace Test Kit in Visual StudioFigura 2 A primeira página do Marketplace Test Kit no Visual Studio

Os conjuntos de testes disponíveis são mostrados nas guias à esquerda. A guia Application Details permite especificar as imagens do aplicativo para os testes automatizados. Os testes automatizados avaliam o tamanho do XAP do aplicativo, a iconografia e as capturas de telas para conformidade com os requisitos de certificação e determinam os recursos usados pelo aplicativo. Os testes manuais fornecem etapas que você pode percorrer para experimentar seu aplicativo e verificar se ele está em conformidade com diretrizes de certificação adicionais.

Neste artigo, focalizarei os testes monitorados. Para obter mais informações sobre todos os conjuntos de testes, consulte a página sobre o Windows Phone Marketplace Test Kit da Biblioteca MSDN (wpdev.ms/toHcRb).

O conjunto de testes monitorados avalia os aplicativos em relação à conformidade com diretrizes de certificação importantes, como:

  • Tempo de inicialização
  • Pico do uso de memória do aplicativo
  • Manipulação do botão Back
  • Saídas inesperadas do aplicativo devido a exceções sem tratamento

Executando os testes monitorados

Para executar os testes monitorados, você precisa iniciar uma compilação de versão do aplicativo, implantá-lo em um dispositivo (os testes não funcionarão no emulador) e navegar por ele. As opções para configurar isso estão na barra de ferramentas padrão do Visual Studio. A meta ao executar os testes monitorados é navegar pelo aplicativo como se fosse um usuário, experimentando todos os possíveis caminhos de navegação. Enquanto você faz isso, o kit de testes monitora o aplicativo e coleta dados sobre ele.

Ao testar o aplicativo com os testes monitorados, teste também o desempenho dele quando você o termina e reativa em um curto período de tempo. Esse processo de terminação e reativação é chamado de "marcação para exclusão". No Windows Phone 7.5, seu aplicativo será inativado automaticamente antes de ser marcado para exclusão. 

Para forçar seu aplicativo para marcação exclusiva imediatamente para fins de depuração e testes, selecione a opção “Tombstone upon deactivation while debugging” na guia Debug nas propriedades do projeto. Abra as propriedades do projeto selecionando Properties no menu Project. A Figura 3 mostra essa opção selecionada. Para obter mais informações sobre a marcação para exclusão, consulte a página de visão geral do modelo de execução do Windows Phone da Biblioteca MSDN (wpdev.ms/ExMod).

Selecting the Option to Test Tombstoning in Project PropertiesFigura 3 Selecionando a opção para testar a marcação para exclusão nas propriedades do projeto

Depois de configurar essas opções, retorno para a guia Marketplace Test Kit. Eu vinculo meu dispositivo registrado para desenvolvedor e clico em Start Application na página Monitored Tests do kit de testes.

Quando o aplicativo é iniciado, navego para frente e para trás selecionando flores, tocando para obter o nome e pressionando o botão Voltar para retornar para a página inicial do aplicativo. Eu toco no botão Start e, em seguida, no botão Back para forçar o aplicativo para ser marcado para exclusão e ser retornado.

Depois de navegar da maneira como um usuário típico navegaria, marcar para exclusão e reativar meu aplicativo, posso interrompê-lo e testar a sessão. Para obter melhores resultados, saio do aplicativo clicando no botão Back na página inicial do aplicativo para encerrar a sessão de teste. Posso clicar no botão Close Application na página Monitored Tests no kit de teste, mas para obter os resultados de teste mais precisos, saio do aplicativo usando o botão Back. Quando o aplicativo é fechado, as sessões de monitoramento são encerradas.

Depois do encerramento da sessão de teste, a barra de status dos resultados do kit de testes informa que o conjunto está analisando os resultados, e quando a análise é concluída a tabela de resultados é atualizada.

Os resultados do meu aplicativo, mostrados na Figura 4, são chocantes.

Test Results Showing Two FailuresFigura 4 Resultados do teste mostrando duas falhas

Meu aplicativo não passou em dois dos quatro testes do conjunto de testes. O tempo de inicialização é muito lento e está usando muita memória. Decido me aprofundar mais.

Usando a ferramenta de análise de desempenho

Em geral, para que seus aplicativos se tornem populares no mercado, eles devem ter alto desempenho e terem bom tempo de resposta. No mínimo, você deve investigar e corrigir problemas de desempenho identificados com o kit de testes. Para qualquer um desses cenários, você pode usar a ferramenta Windows Phone Performance Analysis, também conhecida como criador de perfil.

Fecho o kit de testes por enquanto e decido usar o criador de perfil para examinar o tempo de inicialização e os problemas de memória. A ferramenta é excelente porque mostra problemas potenciais em meu aplicativo e possíveis cursos de ação para corrigi-los.

O criador de perfil tem duas opções:

  • Criação de perfil de execução: o criador de perfil de execução avalia a taxa de quadros do aplicativo, o uso de CPU e o uso geral da memória. Você pode usá-lo para analisar a taxa de preenchimento e ver quantos visuais estão sendo criados e outros detalhes da execução de seu aplicativo, que podem afetar o desempenho.
  • Criação de perfil de memória: o criador de perfil de memória mostra o uso da memória, as cargas de imagens e os eventos de coleta de lixo. É possível usar o criador de perfil de memória para procurar tendências de uso da memória, que podem indicar perda de memória.

Escolha o criador de perfil de execução, a menos que você saiba que o único problema de seu aplicativo seja um problema de memória. Sei que tenho um problema de memória, mas estou curioso sobre o problema no tempo de inicialização e decido primeiro analisar meu aplicativo com o criador de perfil de execução.

Com o projeto do meu aplicativo aberto no Visual Studio, vou para o menu Debug e escolho a opção Start Windows Phone Performance Analysis. Observação: se você estiver usando o Visual Studio Premium ou Ultimate, não escolha Start Performance Analysis, que não se aplica a projetos para telefone.

Quando você abre a ferramenta de análise de desempenho, uma nova guia é aberta no Visual Studio com o nome da sessão de criação de perfil atual. O nome inclui o nome do projeto e a data/hora da sessão de criação de perfil, seguido pelo sufixo .sap usado para arquivos de resultados da criação de perfil. Esses arquivos sempre são salvos no projeto, portanto, você pode exibi-los várias vezes. A Figura 5 mostra a guia Performance Analysis antes da execução de qualquer teste.

The Performance Analysis Tab Before Any Tests Have Been RunFigura 5 A guia Performance Analysis antes da execução de qualquer teste

Na guia do criador de perfil, escolho a opção Execution. Para obter melhores resultados, verifico se Windows Phone Device e Release ainda estão selecionados nas caixas de opções de implantação e de depuração na barra de ferramentas do Visual Studio e verifico se meu dispositivo está vinculado e desbloqueado. Observação: é possível implantar um aplicativo no emulador ao usar o criador de perfil, mas os resultados podem não ser indicativos do desempenho em um dispositivo.

Clico em Launch Application para iniciar a sessão de criação de perfil. Como no Marketplace Test Kit, uso meu aplicativo da maneira como um usuário o faria, marco para exclusão e retorno para o aplicativo pelo menos uma vez. Saio do aplicativo usando o botão Back, que é o método preferencial para obter os resultados mais precisos, embora eu também possa encerrar a sessão de criação de perfil usando a opção Stop Profiling na ferramenta de análise de desempenho. O criador de perfil analisa os resultados por algum tempo e os exibe na página em formato gráfico (mostrada na Figura 6). Meus resultados são muito interessantes.

Results of a Performance Analysis TestFigura 6 Resultados de um teste de análise de desempenho

A parte verde do uso de CPU incluído no gráfico indica atualizações de tela e entradas de toques. Posso ver um alto uso de CPU inicial, o que não é surpreendente, considerando o tempo de inicialização lento. Também vejo picos enormes de uso de CPU alinhados com as imagens que estão sendo carregadas, e que meu uso de memória se torna cada vez mais alto. A exibição desses resultados sem um exame adicional me diz que meu problema de uso de memória, provavelmente, se deve à maneira como estou manipulando imagens em meu aplicativo. Embora toda a memória usada por meu aplicativo seja liberada quando o aplicativo é fechado, com base nesse gráfico, estou preocupado com o fato de que meu aplicativo poderá provocar falhas em um dispositivo se for deixado em execução por mais do que alguns segundos do que gasto testando-o.

Agora, executo a ferramentas de análise de desempenho novamente com a opção de memória selecionada, e isso confirma meu problema crescente de uso de memória.

Localizando e corrigindo o problema

Para acompanhar problemas usando a ferramenta de criação de perfil, selecione as áreas de problema no gráfico e reveja as instruções na seção Observation Summary.

Nos resultados do criador de perfil de execução, clico e arrasto com o mouse para selecionar uma parte do gráfico que mostra um pico de uso de CPU. A seção Performance Warning é atualizada imediatamente com um problema a ser investigado (consulte a Figura 7).

A Performance Warning About High CPU Usage on the UI ThreadFigura 7 Um aviso de desempenho sobre o alto uso de CPU no thread da interface do usuário

De acordo com o Observation Summary, o aplicativo usa grande quantidade de CPU para executar funções no thread da interface do usuário. Isso certamente resulta em tempo de inicialização lento e desempenho geral inadequado, mas não tenho certeza se isso contribui para o problema de memória. O criador de perfil é excelente e me fornece algumas instruções para seguir, e sigo. Seleciono CPU Usage e, em seguida, Functions. A tabela de resultados é atualizada e classifico os resultados pela coluna Inclusive Samples (%). As chamadas de função de meu aplicativo são exibidas em azul com nomes totalmente qualificados que incluem o namespace (com o nome suspeito de MemoryLeak neste caso), a classe e o nome do método. Além disso, as chamadas de função são links ativos para os métodos de meu código. A Figura 8 mostra esses resultados.

The Peformance Analysis Tool Shows Methods That Might Be Causing ProblemsFigura 8 A ferramenta de análise de desempenho mostra os métodos que podem estar provocando problemas

Examinando esses resultados, posso ver que os métodos executados quando carrego a segunda página estão usando grande quantidade de CPU. Isso provavelmente não corrigirá meu problema de tempo de inicialização, mas definitivamente pode estar contribuindo para o problema de memória.

Clico no link para exibir o método FlowerPage.OnNavigatedTo. Esse método cria uma lista de objetos Flower e carrega um bitmap para cada Flower que usa o método. O seguinte é uma chamada típica que faço para o método LoadBitmap:

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

E o método LoadBitmap que carrega o recurso:

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

Quando um usuário navega para a página, extraio o nome da flor que foi clicada na página principal no URI da navegação e carrego a mesma imagem da flor na FlowerPage.

Está claro que o carregamento das imagens está provocando um problema de memória, mas não está claro o que devo fazer em seguida.

Se o Observation Summary não fornecer informações suficientes para solucionar os problemas de desempenho em seu aplicativo, você deverá verificar o MSDN e a Web para obter orientações sobre desempenho. Os seguintes são alguns excelentes recursos:

  • considerações sobre desempenho em aplicativos para Windows Phone (sob a seção sobre mídia) (wpdev.ms/utCq6h)
  • Técnicas de desempenho para Windows Phone (wpdev.ms/perfTech)
  • Blog da equipe de desempenho do Silverlight para Windows Phone (wpdev.ms/slmperf)
  • Analisando e melhorando o desempenho de aplicativos para Windows Phone (vídeo de MIX11) (wpdev.ms/mixwpperf)
  • Lições de especialistas: Principais dicas para criação de um aplicativo do Windows Phone com êxito (vídeo de MIX11) (wpdev.ms/mixwptoptips)

Começo pesquisando novamente os recursos de desempenho e carga em aplicativos de telefone e descubro algo importante. De acordo com a seção Mídia do artigo de Considerações sobre desempenho em aplicativos para Windows Phone da Biblioteca MSDN, devo especificar meus arquivos de imagem como conteúdo e não como recursos porque o telefone está otimizado para usar arquivos. Quando um arquivo de mídia é compilado como um recurso, o conteúdo é copiado em um arquivo antes de ser usado, o que reduz o desempenho.

Altero a ação de compilação de meus arquivos de imagem para Content e faço uma pequena alteração no código para acomodar isso.

No método LoadBitmap, especifico o UriSource de BitmapImage em vez de chamar SetSource:

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

E quando faço a chamada para LoadBitmap, passo a URL relativa para cada bitmap:

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

Executando o kit de testes e as ferramentas de análise de desempenho novamente

Quando achar que corrigiu os problemas apontados no Marketplace Test Kit e na ferramenta Performance Analysis, você poderá executar essas ferramentas novamente.

Recompilo meu aplicativo e executo o Marketplace Test Kit novamente e não posso acreditar na diferença dos resultados (consulte a Figura 9). O aplicativo agora passa em todos os quatro testes. O tempo de inicialização não está excelente, mas está atendendo aos padrões.

Changing Image Handling Results in Passing All Four Marketplace Tests
Figura 9 Resultados da alteração da manipulação de imagens para passar pelos quatro testes do Marketplace

Finalmente, executo o criador de perfil de execução uma última vez. Vejo uma grande diferença nos resultados (consulte a Figura 10).

Image Handling Changes Result in CPU and Memory Performance Analysis Improvements
Figura 10 Resultado das alterações da manipulação de imagens e melhorias na análise de desempenho de CPU e memória

Agora, em vez de grandes picos de CPU e de imagens sendo carregadas repetidamente quando o usuário navega entre as páginas, as imagens são carregadas uma vez quando o aplicativo é iniciado. Esse gráfico também mostra que o uso de memória do aplicativo está constante e relativamente baixo em comparação com a versão anterior do meu aplicativo. Em seguida, seleciono alguns dos menores picos de CPU e vejo os resultados mostrados na Figura 11.

Investigating a CPU Spike Shows No Performance Warnings
Figura 11 A investigação de um pico de CPU não mostra nenhum aviso de desempenho

Estou satisfeito por ver que o criador de perfil não vê nenhum problema de desempenho e faço planos para enviar meu aplicativo para o mercado. Tenho certeza de que ele será aceito e posso continuar a melhorá-lo e a enviar atualizações se desejar.

Siga este padrão

Neste artigo descrevi como identificar e corrigir problemas em um aplicativo de exemplo do Windows Phone usando o Marketplace Test Kit e a ferramenta de análise de desempenho. Essas ferramentas estão integradas no Visual Studio e são instaladas como parte do Windows Phone SDK. O Marketplace Test Kit ajuda a determinar se o aplicativo atenderá aos requisitos de certificação. A ferramenta de análise de desempenho ajudará a identificar problemas de desempenho de memória e de CPU. Antes de enviar seus aplicativos para o mercado, recomendo um padrão semelhante ao mostrado neste artigo:

  1. use as ferramentas que mostrei, incluindo todos os conjuntos de teste do Marketplace Test Kit.
  2. Identifique e corrija todos os problemas.
  3. Teste novamente e verifique as correções.

Se você seguir esse padrão, poderá localizar problemas antecipadamente e criar aplicativos melhores mais rapidamente. Além disso, ajudará a garantir que seus aplicativos sejam aceitos no mercado na primeira tentativa.

Cheryl Simmons é escritor técnico de programação da equipe de Conteúdo para desenvolvedores do Windows Phone na Microsoft.

Agradecemos aos seguintes especialistas técnicos pela revisão deste artigo: Pratap LakshmanRaghuram Lanka e Nitin Madnikar