Eu posso ter economizado 5 horas procurando problemas de ineficiência no código que estou trabalhando agora.
O problema que me incumbiram era que uma função que recalculava valores para um grande número de itens (pacientes com uma certa quantidade de dados de medicação) estava levando a problemas de memória, travando e / ou demorando incrivelmente. Então, busquei incansavelmente a função em questão em busca de bits ineficientes, corrigidos e reescritos, apenas para nunca parecer fazer qualquer progresso.
Quando comecei a trabalhar recentemente esta manhã, comecei a depurar e pesquisar quanto tempo uma chamada da função em questão estava demorando. Rastreando as etapas que o programa realizou, percebi algo … (o código não é o código do programa real, mas simplificado para tornar o problema mais claro)
// Function that is called when the menu item is clicked
void menuFunction() {
while(patient != NULL) {
recalculateValues();
patient = nextPatient;
}
}
void recalculateValues() {
while(patient != NULL) {
// ... do the stuff that it's supposed to do
patient = nextPatient;
}
}
Caso clássico de um laço duplo while. Um problema que eu poderia ter resolvido em menos de 5 minutos, mas acabou demorando 5 horas.
Sempre observem o fluxo do programa, pessoal!