One could use a profiler, but why not just halt the program? [closed]
Se algo estiver fazendo um programa de thread único levar, digamos, 10 vezes o tempo necessário, você poderá executar um criador de perfil. Você também pode interrompê-lo com um botão "pausar" e verá exatamente o que está fazendo.
Mesmo que seja apenas 10% mais lento do que deveria ser, se você parar mais vezes, em breve você verá repetidamente fazendo o que é desnecessário. Normalmente, o problema é uma chamada de função em algum lugar no meio da pilha que não é realmente necessária. Isso não mede o problema, mas com certeza o encontra.
Editar: As objeções geralmente assumem que você apenas toma 1 amostra. Se você está falando sério, pegue 10. Qualquer linha de código que cause alguma porcentagem de desperdício, como 40%, aparecerá na pilha nessa fração de amostras, em média. Gargalos (no código de thread único) não podem ser ocultados.
Edição: Para mostrar o que quero dizer, muitas objeções são da forma "não há amostras suficientes, então o que você vê pode ser totalmente falso" - idéias vagas sobre o acaso. Mas se algo dequalquer descrição reconhecível, não apenas estar em uma rotina ou a rotina estar ativa, está em vigor por 30% das vezes, então a probabilidade de vê-la em qualquer amostra é de 30%.
Suponha que apenas 10 amostras sejam coletadas. O número de vezes que o problema será visto em 10 amostras segue umadistribuição binomial, e a probabilidade de vê-lo 0 vezes é 0,028. A probabilidade de vê-lo 1 vez é 0,121. Por 2 vezes, a probabilidade é de 0,233 e por 3 vezes é de 0,267, após o que cai. Como a probabilidade de vê-lo menos de duas vezes é 0,028 + .121 = 0,139, isso significa que a probabilidade de vê-lo duas ou mais vezes é 1 - 0,139 = 0,861. A regra geral é que se você vir algo que possa ser corrigido em duas ou mais amostras, vale a pena consertar.
Nesse caso, a chance de vê-lo em 10 amostras é de 86%. Se você estiver entre os 14% que não vê, basta colher mais amostras até ver. (Se o número de amostras for aumentado para 20, a chance de vê-lo duas ou mais vezes aumenta para mais de 99%.) Portanto, não foi medido com precisão, mas foi encontrado com precisão, e é importante entender que poderia facilmente ser algo que um criador de perfil não conseguiu encontrar, como algo que envolve o estado dos dados, não o contador do programa.