• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

froskes

Determinar tempo de execução de um processo

6 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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));

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela resposta.

Mas isso conta o tempo de execução real do processo (sem pausas / intromissões de outros processos durante aquele espaço de tempo) ou apenas o tempo entre o processo iniciar e estar concluído?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu fiz um trabalho em C# para ver o tempo de comutações e assim e o que usei foi :  Environment.TickCount;

Fazes antes..

  int startTime = Environment.TickCount;

e depois..

e depois fazes a subtracção...

Se quiseres dar uma vista de olhos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora