Pergunta

Existem algumas ferramentas para dar algum tipo de histograma de onde a maior parte do tempo de execução do programa é gasto em?

Isto é para um projeto usando c ++ no visual studio 2008.

Foi útil?

Solução

O nome que você está depois é um profiler . Tente encontrar aplicação Gargalos com o Visual Studio Profiler

Outras dicas

Eu tenho usado um profiler chamado "AQ Time" que dá todos os detalhes que você quer saber sobre sobre o desempenho do seu código. Não é gratuito embora ..

Você pode obter um histograma do contador de programa, mas é praticamente inútil, a menos que você está fazendo algo estúpido como passar um tempo em uma espécie de bolha de uma grande variedade de ints ou duplos.

Se você fazer algo tão simples como uma espécie de bolha de uma matriz de strings, o histograma PC só irá dizer-lhe que você tem um hotspot na rotina String de comparação. Isso não é de muita ajuda, não é?

Eu sei que você não faria uma espécie de bolha, mas apenas por diversão, vamos supor que você fez, e que estava tomando 90% do seu tempo. (Ou seja, se você fixa-lo, ele poderia ir até 10 vezes mais rápido.)

Na verdade, é uma coisa muito fácil de encontrar, porque se você é só apertar o botão de pausa no depurador, você quase certamente irá ver que ele pára na rotina String de comparação. Então, se você olhar para cima o nível de pilha um, você estará olhando diretamente para o loop bubble sort que é o seu erro. Se você não está certo que você realmente viu o problema, apenas pausá-lo várias vezes. O número de vezes que você vê o problema diz-lhe como caro ele é.

Qualquer linha de código que aparece na pilha de chamadas em vários pausas, é algo que está implorando para corrigi-lo. Alguns você não pode, como "_main chamada", mas se você pode você vai ter uma boa aceleração, garantiu.

Em seguida, fazê-lo novamente, e novamente.

Quando você acabar de coisas que você pode corrigir, então você realmente sintonizado o programa dentro de uma polegada de sua vida.

É simples assim.


Você também pode usar o profiler no Visual Studio. É uma boa ferramenta, mas estar ciente destas lacunas:

  • Confundir você com "tempo exclusivo", que se você se concentrar em informações de nível de linha, é quase sem sentido.

  • Se o seu programa é perder tempo fazendo I / O, ele não vai ver isso, porque quando ele pára de fazer I / O, a paragem de amostras, a menos que você use instrumentação.

  • Mas se você usar instrumentação, você não vai obter informações de nível de linha, apenas a função de nível. Isso é ok se suas funções são todas pequenas.

  • confunde com a "árvore de chamadas". O que importa para uma linha de código é quantos pilha de amostras ele estiver ligado. Se é em muitos ramos da árvore chamada, a árvore chamada não irá mostrar-lhe o que realmente custa.

  • Se ele diz que uma linha é caro, não pode dizer-lhe porquê. Por que você quer ver o máximo de informações de estado em cada amostra que você precisa, em vez de apenas resumos.

  • É difícil dizer quando você quer fazer amostras, e quando não. Você quer isso para provar quando você está esperando para o aplicativo, não quando ele está esperando por você.

Portanto, agora que você sabe que precisa de um profiler, você pode não ter o Visual Studio, então muito sonolento pode ser de ajuda.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top