Exercício 1.3: Identificando Gargalos 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. Neste procedimento, você utiliza a Visualização do Gráfico de Chamada de Desempenho para identificar um gargalo dentro do programa classificação.
Para localizar gargalos:
- No Monitor de Definição de Perfil, clique com o botão direito do mouse no recurso Definição de Perfil e, em seguida, selecione Abrir Com > 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ó Processo que representa o tempo acumulativo de toda a execução. Em nosso caso, de acordo com as estatísticas Visíveis na linha de status, há um total de apenas 17 nós sendo que todos eles são exibidos. Um 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 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 Destacar, localizado acima do gráfico, Maximizar Caminho para Raiz está selecionada.
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 rápido na classe 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 várias chamadas.
- Para obter uma exibição gráfica detalhada dos dados para o método, clique duas vezes no nó. A visualização Detalhes do Método é aberta.
- Na visualização Detalhes do Método, observe a área de janela dos 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 de todos os métodos que podem ser classificados, clique com o botão direito do mouse no recurso de definição de perfil e selecione Abrir Com > Estatísticas do Método.
Clique no cabeçalho da coluna 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.
Agora você constatou 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.