Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os utilizadores esperam que as suas aplicações se mantenham responsivas, que se sintam naturais e que não esgotem a bateria. Tecnicamente, o desempenho é um requisito não funcional, mas tratar o desempenho como uma funcionalidade ajuda-o a cumprir as expectativas dos seus utilizadores. Especifique objetivos e meça resultados — estes são fatores-chave. Determine os seus cenários críticos de desempenho, defina o que significa bom desempenho e depois meça cedo e frequentemente ao longo do ciclo de vida do seu projeto para ter confiança de que atingirá os seus objetivos.
Especificar objetivos
A experiência do utilizador é uma forma básica de definir um bom desempenho. O tempo de arranque de uma aplicação pode influenciar a perceção do utilizador sobre o seu desempenho. Um utilizador pode considerar um tempo de lançamento de uma aplicação inferior a um segundo como excelente, menos de cinco segundos como bom e superior a cinco segundos como mau.
Outras métricas têm um impacto menos óbvio na experiência do utilizador, como a memória. As hipóteses de uma aplicação ser terminada enquanto está suspensa ou inativa aumentam com a quantidade de memória que a aplicação ativa utiliza. O elevado consumo de memória degrada a experiência de todas as aplicações no sistema, por isso ter um objetivo de consumo de memória é razoável.
Defina objetivos iniciais que sejam específicos e mensuráveis. Devem enquadrar-se em três categorias:
- Tempo — quanto tempo demoram os utilizadores ou a aplicação a concluir tarefas
- Fluidez — a velocidade e continuidade com que a aplicação se redesenha em resposta à interação do utilizador
- Eficiência — quão bem a aplicação poupa recursos do sistema, incluindo a energia da bateria
Time
Pense em intervalos aceitáveis de tempo decorrido (classes de interação) para os utilizadores completarem as suas tarefas.
| Classe de interação | Perceção do utilizador | Ideal | Máximo | Examples |
|---|---|---|---|---|
| Rápido | Atraso minimamente perceptível | 100 ms | 200 ms | Abre a barra da aplicação; Pressiona um botão (primeira resposta) |
| Típico | Rápido, mas não rápido | 300 ms | 500 ms | Redimensionar; Zoom semântico |
| Adaptativo | Não é rápido, mas parece responsivo | 500 ms | 1 segundo | Navegue para outra página; Retomar a aplicação |
| Launch | Experiência competitiva | 1 segundo | 3 segundos | Inicie a aplicação pela primeira vez |
| Contínuo | Já não parece responsivo | 500 ms | 5 segundos | Descarregue um ficheiro da Internet |
| Cativo | Demorado; o utilizador podia sair daqui | 500 ms | 10 segundos | Instalar várias aplicações a partir da loja |
Atribui classes de interação aos cenários de desempenho da tua aplicação. Para cada cenário, atribui a referência no tempo da aplicação, uma parte da experiência do utilizador e uma classe de interação.
Fluidez
Objetivos específicos de fluidez mensuráveis para a sua aplicação podem incluir:
- Sem redesenhos do ecrã, paradas e partidas (glitches)
- As animações são renderizadas a 60 fotogramas por segundo (FPS)
- Quando um utilizador faz uma panorâmica ou desliza, a aplicação apresenta entre 3 a 6 páginas de conteúdo por segundo
Efficiency
Objetivos específicos de eficiência mensuráveis para a sua aplicação podem incluir:
- A percentagem de CPU da sua aplicação está igual ou abaixo de um valor-alvo e o uso de memória em MB está sempre igual ou abaixo de um alvo
- Quando a aplicação está inativa, o consumo de CPU e memória é mínimo
- A sua aplicação pode ser usada ativamente durante um número alvo de horas com bateria
Desenhe a sua aplicação para desempenho
Use os seus objetivos de desempenho para influenciar o design da sua aplicação. Considere estes aspetos:
UI(Interface de Utilizador)
- Maximize o tempo de análise e carregamento e a eficiência de memória de cada página otimizando a marcação XAML. Adia o carregamento da interface e do código até ser necessário.
- Para
ListVieweGridView, faça todos os itens do mesmo tamanho e use o máximo de técnicas de otimização possível. - Declare a interface do utilizador em linguagem de marcação em vez de a construir imperativamente no código.
- Adia a criação dos elementos da interface até que o utilizador precise deles usando o atributo x:Load .
- Prefiro transições de temas e animações a animações com storyboard. As animações por storyboard requerem atualizações constantes do ecrã e mantêm o processador e o pipeline gráfico ativos.
- Carregue as imagens num tamanho apropriado para a vista em que as apresenta.
CPU, memória e alimentação
- Programar tarefas de menor prioridade em threads de menor prioridade. Ver Programação assíncrona e a classe DispatcherQueue .
- Minimize o consumo de memória da sua aplicação libertando recursos caros (como multimédia) quando não forem necessários.
- Evite fugas de memória desregistando os gestores de eventos e desreferenciando elementos da interface sempre que possível.
- Para otimizar a autonomia da bateria, seja moderado na frequência com que sonda dados, interroga um sensor ou agenda tarefas para o CPU quando este está inativo.
Acesso aos dados
- Se possível, pré-carregue o conteúdo.
- Armazene em cache o conteúdo cujo acesso é dispendioso.
- Para falhas de cache, mostre uma interface provisória o mais rapidamente possível que indique que a aplicação ainda está a carregar conteúdo.
Ferramenta de desempenho
À medida que programas, adiciona código que regista mensagens e eventos em certos momentos enquanto a tua aplicação está a correr. Mais tarde, utilize ferramentas de perfilagem como Windows o Performance Recorder e Windows Analisador de Desempenho (ambas incluídas no Windows Performance Toolkit) para criar e visualizar um relatório sobre o desempenho da sua aplicação.
O Windows fornece APIs de registo apoiadas pelo Event Tracing for Windows (ETW) que oferecem uma solução rica de registo e rastreamento de eventos. As APIs no espaço de nomes Windows.Foundation.Diagnostics incluem as classes FileLoggingSession, LoggingActivity, LoggingChannel e LoggingSession.
// using Windows.Foundation.Diagnostics;
LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
myLoggingChannel.LogMessage("Here's my logged message.", LoggingLevel.Information);
Para registar eventos de início e paragem ao longo de um período de tempo:
LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
LoggingActivity myLoggingActivity;
using (myLoggingActivity = new LoggingActivity("MyLoggingActivity", myLoggingChannel))
{
// A start event is logged when the activity begins.
// Add code here to do something of interest.
}
// An end event is logged when the activity ends.
Testar e medir em relação aos objetivos de desempenho
Use estas técnicas e ferramentas para testar como a sua aplicação se compara com os seus objetivos de desempenho:
- Teste contra uma grande variedade de configurações de hardware, incluindo desktops, portáteis, ultrabooks e tablets.
- Teste em uma vasta gama de tamanhos de ecrã. Ecrãs mais largos mostram mais conteúdo, o que pode afetar negativamente o desempenho.
- Elimine o maior número possível de variáveis de teste:
- Desligue as aplicações em segundo plano no dispositivo de teste.
- Constrói a tua aplicação na configuração de Release antes de a implementares no dispositivo de teste.
- Execute a aplicação várias vezes para ajudar a eliminar variáveis de teste aleatórias e garantir medições consistentes.
- Teste de disponibilidade reduzida de energia. Os dispositivos dos utilizadores podem ter significativamente menos energia do que a sua máquina de desenvolvimento.
- Use uma combinação de ferramentas como Visual Studio e Windows Analisador de Desempenho para medir o desempenho da aplicação.
Responder aos resultados dos testes de desempenho
Depois de analisar os resultados dos seus testes de desempenho, determine se são necessárias alterações:
- Deves mudar as decisões de design da tua aplicação ou otimizar o teu código?
- Deves adicionar, remover ou alterar a instrumentação no código?
- Deves rever os teus objetivos de desempenho?
Se forem necessárias alterações, faça-as e volte à instrumentação ou testes.
Optimize
Otimize apenas os caminhos de código críticos de desempenho na sua aplicação — aqueles onde é mais tempo gasto. O perfilamento indica-lhe quais são estas áreas. Muitas vezes, há um compromisso entre boas práticas de conceção e código com o mais alto nível de otimização. Priorize a produtividade dos programadores e um bom design de software em áreas onde o desempenho não seja uma preocupação.
Conteúdo relacionado
Windows developer