As visualizações Performance Call Graph (Gráfico de Chamada de Desempenho) e Method Detail (Detalhe do Método) o ajudam a identificar as partes de seu aplicativo que consomem a maior parte do tempo. Em seguida, é possível investigar se essas áreas demoradas podem ficar mais eficientes. Ao analisar o código do aplicativo, é útil estar ciente dos erros de codificação mais freqüentes que resultam em desempenho ineficiente.
Computações desnecessárias: À medida que os aplicativos evoluem e os algoritmos são refinados ou à medida que os dados são alterados, porções do código que eram necessárias em versões anteriores podem cair em desuso, sem nunca terem sido removidas. Por isso, muitos programas grandes executam computações cujos resultados nunca serão utilizados. Os gargalos são causados por tempo gasto nesse código inativo.
Outras computações desnecessárias comuns são as feitos automaticamente ou por padrão, mesmo se não forem requeridas. Aplicativos que desnecessariamente liberam estruturas de dados durante o encerramento do programa ou que abrem conexões para estações de trabalho mesmo que não haja usuário para elas são exemplos desse tipo de gargalo. É possível traçar o perfil do desempenho para localizar o tempo gasto no código inativo. Assim que estiver convencido de que os resultados de uma computação são inúteis, você poderá remover o código.
Computação prematura: Qualquer computação executada antes de que haja uma necessidade por seus resultados pode causar um gargalo. Por exemplo, pode não haver um motivo para classificar uma lista de números se o usuário não tiver solicitado que a classificação seja executada. Os dados de desempenho não podem informar se a computação pode ser adiada; no entanto, informam o custo da computação, e você pode decidir se pode adiá-la.
Recálculo desnecessário: Às vezes, os programas recalculam valores necessários em vez de armazená-los para uso posterior. Por exemplo, determinar o comprimento de uma cadeia constante pode resultar em computação desnecessária se ela estiver incluída em um loop; o comprimento da cadeia é recalculado várias vezes, sempre obtendo o mesmo valor. Os dados de desempenho podem informar onde o recálculo está ocorrendo e você pode decidir por armazenar o valor depois de uma computação.
Computação ineficiente: Uma má opção de algoritmo ou layout de estrutura de dados pode causar trabalho extra para o programa. O desempenho inicial pode parecer aceitável, devido a pequenos conjuntos de dados, mas pode escalar de forma inadequada quando apresentado a conjuntos de dados maiores ou mais complexos. O traçado de perfil de desempenho pode informar o custo de cada computação em escalas diferentes, para que seja possível prever se haverá um problema com conjuntos de dados ainda maiores. Em seguida, é possível utilizar algoritmos e estruturas de dados alternativos que executem o trabalho mais rapidamente.
As fugas de memória e gargalos de encadeamento também podem degradar o desempenho. Utilize os conjuntos de traçado de perfil Memory Leak Analysis (Análise de Fuga de Memória) e Thread Analysis (Análise de Encadeamento) para coletar dados para resolver esses problemas.