Jump to content

Determinar tempo de execução de um processo


froskes
 Share

Recommended Posts

Boas a todos e obrigado por lerem.

Eu preciso de saber exactamente quanto tempo demora um método a processar, para isso coloquei    DateTime start = DateTime.Now; antes e depois da invocação do método e no fim calculei o tempo que passou.

Mas isso não me chega, porque o processador não esteve sempre ocupado com o meu processo, aqui é que está a minha dificuldade, preciso de saber quanto tempo o meu processo esteve a correr, ou então quanto tempo este ele parado desde que o invoquei.

Obrigado desde já a todos.

Cumprimentos.

Link to comment
Share on other sites

Usa antes a class Process. Algo tipo isto:

Process meuProcesso = Process.GetCurrentProcess();
TimeSpan inicio = meuProcesso.TotalProcessorTime;

// Chama funcao super demorada...

TimeSpan fim = meuProcesso.TotalProcessorTime();

Console.Writeline("Tempo de processo foi de {0}", fim.Subtract(inicio));

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other sites

Não percebi a pergunta.

Mas quando chamas a propriedade TotalProcessorTime vai-te dar o tempo que o processo usou o CPU desde que arrancou. Será o mesmo tempo que aparece no Gestor de Tarefas do Windows na coluna Tempo de CPU.

Ora se queres ver o tempo que a função demora a executar é so ires buscar o tempo total antes e depois da função e fazeres a diferença.

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other sites

Antes te de dizer o resultado é melhor explicar o porquê de eu querer isto.

Para uma cadeira da universidade preciso de saber quanto tempo demora um disco rígido a escrever um ficheiro de 1MB - um benchmark primitivo. Mas tem de ser o tempo "puro" que o disco demorou a escrever. Não pode ter interferências de outros processos do Sistema Operativo.

Como não posso correr o processo em real time, preciso de saber quanto tempo é que o CPU usou para o executar ou então quanto tempo esse processo esteve em pausa desde que o CPU começou a sua execução até a terminar.

É uma questão dificil de explicar, mas o que perguntei acima é se o TotalProcessorTime retorna o tempo que o CPU usou para processar apenas o meu pedido ( ou seja. o CPU pega no meu processo e o tempo começa a contar. O CPU pára o meu processo e deixa-o em standby para começar outro e o tempo pára também. O CPU volta a pegar no meu processo e o tempo volta a contar.... e assim sucessivamente)

Desculpa se não me faço entender, mas é realmente um bocado complicado de passar por escrito o que pretendo.

De qualquer maneira, o tempo que me é devolvido ao usar o TotalProcessorTime é sempre menor ou igual ao tempo que me é devolvido se eu usar o  DateTime start = DateTime.Now;  mas eu gostava de ter a certeza que é mesmo aquilo que eu preciso.

Obrigado pelo tempo,

cumprimentos.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.