O objetivo da aplicação é ler uma base de dados em XML e atualizar o banco, portanto, envolve uma série de loops.
Uma solução super simples resolveu meu problema. Bastou colocar um comando Sleep(10) no fim de cada loop (pode ser no início também) e acabou-se o problema de consumo de processador.
A função Sleep faz com que a thread da aplicação adormeça por 10 milisegundos (no meu caso) e devolve o controle da CPU ao Sistema Operacional, tempo mais que suficiente para que os outros processos sejam executados tranquilamente.
Com o uso do Sleep, o consumo de CPU caiu de 100% para uma média de 7 a 8%, e em raros momentos chega a 40%.
se usar
ResponderExcluirApplication.ProcessMessages;
faria o mesmo
Edmar Frazão
Acredito que não seja a mesma coisa. Application.ProcessMessages faz com que a aplicação processe mensagens recebidas, ou seja, continua usando a CPU. Num processo longo, você pode usar ProcessMessages para atualizar um relógio, por exemplo.
ResponderExcluirSleep faz com que a aplicação "adormeça", liberando a CPU para o Sistema Operacional.