Calcular o Tempo de Duração de Um Insert e um Select

Delphi

09/11/2004

estou precisando de uma rotina para calcular o tempo de duração de uma inserção de registros q está dentro de um [b:62c9c51a02]for to do[/b:62c9c51a02] )insere vários registros) e depois na pesquisa sql ele calcule também o tempo de duração dessa consulta até chegar ao resultado da pesquisa eu tentei com um ttimer mas não deu muito certo. estou usando ibx.

obrigado


Tap_pedroso

Tap_pedroso

Curtidas 0

Respostas

Gurc

Gurc

09/11/2004

Colega, não lembro certinho o nome da função, pois usei-a poucas vezes. Mas ela está na Unit DateUtils, se eu não me engano :D. Tente procurá-la no Help. Ela pega a diferença entre dois TDateTimes em milisegundos. Tem também uma função da API do Windows que retorna os Ticks do processador. Você grava em uma variável inteira e depois compara subtraindo no final do [b:781c313356]for[/b:781c313356].
Espero, mesmo sendo dificil, ter ajudado :lol:.
Até mais,
Gustavo Royer Chaurais


GOSTEI 0
Gurc

Gurc

09/11/2004

Colega, não lembro certinho o nome da função, pois usei-a poucas vezes. Mas ela está na Unit DateUtils, se eu não me engano :D. Tente procurá-la no Help. Ela pega a diferença entre dois TDateTimes em milisegundos. Tem também uma função da API do Windows que retorna os Ticks do processador. Você grava em uma variável inteira e depois compara subtraindo no final do [b:3262bf44d3]for[/b:3262bf44d3].
Espero, mesmo sendo dificil, ter ajudado :lol:.
Até mais,
Gustavo Royer Chaurais


GOSTEI 0
Rnildo

Rnildo

09/11/2004

Caro colega. Veja se isto ajuda. No início da rotina chame a função abaixo com argumento False e no final com argumento true. A resposta é o tempo de processamento em string.

var XTempoIni : TDateTime; // variável global

Function TForm1.TempoDura(Tipo : boolean) : string;
begin
// Se tipo false, armazena tempo atual do computador em XTempoIni
// se True, retorna em string tempo decorrido a partir da chamada
// inicial Tempo(False), indicando o tempo de duração de execução
// de uma rotina. Deve ser chamada com False no início e com true no final do bloco.
if Tipo then Result:=TimeToStr(Time - XTempoIni)
else begin
XTempoIni:=Time;
Result:=´´;
end;
end;


GOSTEI 0
Gurc

Gurc

09/11/2004

O nome da função no DateUtils é MilliSecondsBetween. Ela não é tão precisa. A da API do Windows é GetTickCount que retorna um cardinal.
Tente usar a segunda.
Até mais,
Gustavo Royer Chaurais


GOSTEI 0
Osocram

Osocram

09/11/2004

O nome da função no DateUtils é MilliSecondsBetween. Ela não é tão precisa. A da API do Windows é GetTickCount que retorna um cardinal. Tente usar a segunda. Até mais, Gustavo Royer Chaurais

como o Gurc disse use GetTickCount q eh mais preciso... pois se a sua funcao exigir d+ do processamente o relogio pod atrazar.... pois eh o processador q controla o relogio e ele estiver ocioso fazendo outra coisa... o relogio fica parado


GOSTEI 0
Gurc

Gurc

09/11/2004

[quote:046453aec7=´gurc´]O nome da função no DateUtils é MilliSecondsBetween. Ela não é tão precisa. A da API do Windows é GetTickCount que retorna um cardinal. Tente usar a segunda. Até mais, Gustavo Royer Chaurais

como o Gurc disse use GetTickCount q eh mais preciso... pois se a sua funcao exigir d+ do processamente o relogio pod atrazar.... pois eh o processador q controla o relogio e ele estiver ocioso fazendo outra coisa... o relogio fica parado[/quote:046453aec7]

Exatamente, osocram... é isso aí! :D


GOSTEI 0
Tap_pedroso

Tap_pedroso

09/11/2004

ontem eu fiz o seguinte:
logo no inicio do codigo eu carreguei uma variarel com a hara atual e no fim eu carreguei outra com a hora atual tambem aí eu subtrai as horas e parace q deu certo mas vou testar com o GetTickCount.

valeu pessoal :lol:


GOSTEI 0
Tap_pedroso

Tap_pedroso

09/11/2004

eu fiz um teste da seguite maneira:

var
i:integer;
begin
 edit1.Text:=floattostr(GetTickCount);
 for i:=0 to 100000 do
  begin
   edit2.Text:=inttostr(i);
  end;
 edit3.Text:=floattostr(GetTickCount);
 edit4.Text:=floattostr(strtofloat(edit3.Text)-strtofloat(edit1.Text));
end;


é isso mesmo ele me retorna em milisegundos?


GOSTEI 0
Gurc

Gurc

09/11/2004

eu fiz um teste da seguite maneira:
var
i:integer;
begin
 edit1.Text:=floattostr(GetTickCount);
 for i:=0 to 100000 do
  begin
   edit2.Text:=inttostr(i);
  end;
 edit3.Text:=floattostr(GetTickCount);
 edit4.Text:=floattostr(strtofloat(edit3.Text)-strtofloat(edit1.Text));
end;
é isso mesmo ele me retorna em milisegundos?


Isso, pode ser feito assim e retorna em milisegundos mesmo.


GOSTEI 0
Xtreme

Xtreme

09/11/2004

faz o seguinte:

var 
   time1 : tdatetime;
   time2 : tdatetime;
begin
   time1:=time;
   for <> to <> do
   begin
   end;
   time2:=time;
   time1:=time1-time2;
   showmessage(formatdatetime(´hh:mm:ss:zzz´,time1));
end;



GOSTEI 0
Tatuweb

Tatuweb

09/11/2004

Existem três APIs do Windows que trabalham em conjunto e foram desenvolvidas especialmente para esse tipo de cálculo. No primeiro link abaixo vc encontra a explicação e no segundo link o código-fonte.

[b:2af94a9c0d]Explicação da API:[/b:2af94a9c0d]
http://www.latiumsoftware.com/br/pascal/0047.php#5

[b:2af94a9c0d]Exemplo. Procure dentro da pasta HighAccuracyTimer:[/b:2af94a9c0d]
http://www.latiumsoftware.com/br/pascal/p0047.zip


GOSTEI 0
POSTAR