Exercício 1.3: Identificando um Gargalo de Desempenho
Antes de iniciar, você deve concluir o Exercício 1.2 Coletando Dados de Desempenho e de Cobertura.
Os gargalos de desempenho são áreas dentro do código que diminuem a velocidade ou param a execução. Nesse procedimento, você utiliza a visualização Gráfico de Chamada de Desempenho para identificar um gargalo dentro do programa sort.
Nota: o código extra para coletar dados de cobertura do nível de linha podem distorcer
os dados do desempenho coletados. Se você não receber resultados semelhantes a esses descritos aqui,
utilize uma execução de traçado de perfil para coletar dados de desempenho e outra execução de traçado de perfil para coletar dados de cobertura. Lembre-se disso quando aplicar perfil nos
próprios programas.
Para localizar gargalos:
- No Monitor de Tração de Persil, clique com o botão direito do mouse no recurso de traçado de perfil " Execution Time Analysis (Análise de Tempo de Execução) " e, em seguida, clique em Open With (Abrir com) > Performance Call Graph (Gráfico de Chamada de Desempenho).
A visualização do Gráfico de Chamada de Desempenho, por padrão, exibe as seguintes informações:
- Os 20 nós que consomem mais tempo na execução da definição de perfil, mais o nó Process (Processo) que representa o tempo acumulativo de toda a execução. Em nosso caso, de acordo com as estatísticas Visible (Visíveis) na linha de status, há um total de apenas 17 nós sendo que todos eles são exibidos. Um node (nó) pode representar um método, um processo ou um encadeamento.
- A estrutura de chamada dinâmica do programa durante a execução da definição de perfil, mostrada pelas linhas de conexão (arcs) vinculando os nós. As linhas mais grossas indicam os caminhos de chamada que consomem mais tempo.
Dica: Clique com o botão direito do mouse no nó para exibir um menu que permita que você foque a exibição no nó e em seus descendentes (a Subtree (Subárvore)) ou manipule a exibição de outras maneiras. Esses comandos de menu permitem que você simplifique a massa de dados coletados para um aplicativo ainda menor.
- Observe que no campo Highlight (Destacar), localizado acima do gráfico, Max Path to Root (Maximizar Caminho para Raiz) está selecionada.
Max Path to Root (Maximizar Caminho para Raiz) em destaque mostra o único caminho de chamada que consome mais tempo na atual execução do aplicativo. Especificamente, isso altera a exibição do gráfico de chamada das seguintes maneiras:
- O nó em seu programa que consumia mais tempo é selecionado. Em nosso exemplo, esse nó é o método quick (rápido) na classe Sort (Classificação).
- O caminho de chamada do nó selecionado para o nó Processo que representa o tempo total de toda a execução é destacado.
- Observe que há também um método bsort no gráfico de chamada, representando o algoritmo da classificação por bolhas. Isso fica claro a partir da espessura das linhas que a bsort executou melhor que a qsort nesta execução.
Obtendo Informações Adicionais sobre Desempenho
A visualização Gráfico de Chamada de Desempenho e outras visualizações na plataforma fornecem detalhes adicionais sobre o desempenho do seu aplicativo.
Você pode obter dados adicionais de desempenho das seguintes maneiras:
- Para saber mais sobre como a Sort.quick foi executada, pare seu cursor sobre o nó Sort.quick. Uma dica de ferramenta aparece com estatísticas para o método. Observe que o método faz muitas chamadas.
- Para obter uma exibição gráfica detalhada dos dados para o método, clique duas vezes no nó. A visualização Method Detail (Detalhes do Método) é aberta.
- Na visualização Method Detail (Detalhes do Método), observe a área de janela dos Callers (Responsáveis pela Chamada). Observe que o método é chamado pela Sort.Qsort somente uma vez, mas chama a si mesmo milhares de vezes. Ele em si mesmo não é duvidoso; normalmente uma classificação rápida é severamente recursiva. No entanto, a quantidade de tempo relativamente grande para as chamadas é duvidosa.
- Para examinar uma lista classificável de todos os métodos:
- Clique com o botão direito do mouse no recurso de traçado de perfil "Execution Time Analysis (Análise de Tempo de Execução)" e selecione Open With (Abrir com) > Execution Statistics (Estatísticas de Execução).
- Na visualização Execution Statistics (Estatísticas de Execução), clique no botão Method Level Information (Informações de Nível do Método) (
).

- Clique no cabeçalho da coluna Base Time (Tempo Base) para classificar os métodos de acordo com a quantidade de tempo gasta em cada método durante a execução atual. Você pode ver que quick é consideravelmente mais lento que método de classificação por bolhas bsort.

Você verificou agora que o método quick consome mais tempo do que o esperado. Você viu também como se pode obter informações de desempenho das visualizações Gráfico de Chamada de Desempenho e Detalhes do Método. Estas informações serão importantes quando você inspecionar o código e descobrir onde é preciso fazer modificações.
Antes de inspecionar o código, no entanto, devemos descobrir também se havia algum método no código que não foi executado. Essa verificação nos dará um melhor entendimento do escopo do aplicativo e também indicará se há algum caminho alternativo que esse programa pode conter.
Você está pronto para iniciar o Exercício 1.4: Verificando a Cobertura de Código para determinar se há algum método não executado e caminhos alternativos.