Hello again folks!
Medir o tempo de processamento de certos momentos das nossas aplicações é sumamente importante para otimizarmos os nossos códigos, processos, acessos, etc... Essa prática não deve ser ignorada, antes, devemos re-escrever códigos, algoritmos, mudarmos técnicas e experimentarmos até encontrarmos a mais eficiente.
Faça questão de medir a performance das suas queries, a geração de arquivos em determinandos processo de automação. Busque identificar qual é a interface que se comporta melhor no ambiente para o qual está desenvolvendo.
Mas, para medir, precisa mensurar, detectar. Como? Fácil, a função abaixo lhe permitirá tal liberdade.
Function MilisSeconds() As StringLet MilisSeconds = Strings.Format(Now, "dd-MMM-yyyy HH:nn:ss") & "." & Strings.Right(Strings.Format(Timer, "#0.00"), 2)End Function
Mas como posso aplicar isso nas minhas procedures e functions ?
' Author: Date: Contact:
' André Bernardes 10/05/2011 15:31 bernardess@gmail.com http://inanyplace.blogspot.com/
' Application: ********.
' Cria a **************************************.
' Listening: Recognizer - Daft Punk - Tron Legacy.
Dim nStart As String
DoCmd.RunCommand acCmdSaveRecord
Let nStart = Right(TimeInMS(), 11) 'Right(Now(), 8)
Call AdjustSpecialties
Call AssemblerCentralEngine
Call AssemblerCentralEngine2
Call SeedData ' Arquiva os dados para consulta e análise posteriores
Call AssemblerCentralEngine
Call AssemblerCentralEngine2
Call SeedData ' Arquiva os dados para consulta e análise posteriores
Me.cmbCenarios.Requery ' Atualiza o Combo de Exclusão de cenários.
Let Me.cxVersion.Value = Now() & " Versão 00" ' Atualiza a caixa de texto onde se dá os nomes para novos cenários.
MsgBox "Tabela criada com sucesso!" & Chr(10) & Chr(13) & _
"" & Chr(10) & Chr(13) & _
" TABELA: tbl_Bernardes" & Chr(10) & Chr(13) & _
"" & Chr(10) & Chr(13) & _
"CENÁRIO: " & ReturnVersion() & Chr(10) & Chr(13) & _
"" & Chr(10) & Chr(13) & _
"Iniciou em: " & nStart & " - Finalizou em: " & Right(TimeInMS(), 11) & Chr(10) & Chr(13) & _
"" & Chr(10) & Chr(13) & _
"Os dados foram preservados para análises posteriores." & Chr(10) & Chr(13) & _
"", vbInformation, ".: Informação: Versão " & ReturnVersion()
"" & Chr(10) & Chr(13) & _
" TABELA: tbl_Bernardes" & Chr(10) & Chr(13) & _
"" & Chr(10) & Chr(13) & _
"CENÁRIO: " & ReturnVersion() & Chr(10) & Chr(13) & _
"" & Chr(10) & Chr(13) & _
"Iniciou em: " & nStart & " - Finalizou em: " & Right(TimeInMS(), 11) & Chr(10) & Chr(13) & _
"" & Chr(10) & Chr(13) & _
"Os dados foram preservados para análises posteriores." & Chr(10) & Chr(13) & _
"", vbInformation, ".: Informação: Versão " & ReturnVersion()
End Sub
Existe um outro modo de ter este mesmo resultado, utilizando API e DLL. Não acredito que seja mais útil, mas em todo caso, teste-o você mesmo se desejar:
Private Type SYSTEMTIME
wYear As IntegerwMonth As IntegerwDayOfWeek As IntegerwDay As IntegerwHour As IntegerwMinute As IntegerwSecond As IntegerwMilliseconds As Integer
End Type
Private Declare Sub GetSystemTime Lib "kernel32"
(lpSystemTime As SYSTEMTIME)Public Function nMillisecond() As StringDim tSystem As SYSTEMTIMEDim nRetOn Error Resume NextGetSystemTime tSystemLet sRet = Hour(Now()) & ":" & Minute(Now()) & ":" & Second(Now()) & _":" & tSystem.wMillisecondsLet nMillisecond = nRet
End Function
Vocês sabem como sou, se existe um outra forma, e a conheço, não deixo de lhes mostrar (medindo processamento em centésimos de segundos com o método Timer):
Public Sub TestBernardes()Dim fTimeStart As SingleDim fTimeEnd As SingleLet fTimeStart = TimerSomeProcedureLet fTimeEnd = TimerDebug.Print Format$((fTimeEnd - fTimeStart) * 100!, "0.00 "" Centésimos de segundos""")End Sub
Public Sub SomeProcedure()
Dim i As Long, r As Double
For i = 0& To 10000000
Let r = Rnd
Next
End Sub
Reference:
VBAADUDExcel ForumStack Overflow