GURUS - OTIMIZACAO DE CODIGO

Olá galera, criei este tópico para que alguns Usuários, como eu, tenham algumas dicas de alguns Feras em VB, com relação a Otimização de Código, algumas dicas para Usuário iniciantes e intermediários voltadas ao melhoramento/versatilidade/praticidade do Código.
Recentemente postei uma dica que peguei em um site de VB sobre otimização ( Dicas - tem algumas interessantes) mas é lógico que elas não se compara a \\\\\\\"Anos\\\\\\\" que programação e prática que alguns Feras em VB tem, [txt-color=#000080] Não estou pedindo que nos dê de mão beijada, todo o conhecimento que adquiriram com suor e dinheiro, [/txt-color] Estou pedindo uma Breve luz sobre o assunto!
[txt-color=#008000] Conto com a ajuda de vocês: [/txt-color]

[txt-color=#ff0000]














[txt-color=#000080][txt-size=3]Quais as dicas de otimização de código que vocês podem nos dar?[/txt-size][/txt-color]



Aguardo os Gurus...
[txt-size=3]"FAÇA SEUS PRÓ“PRIOS TESTE DE PERFORMANCE"[/txt-size]
Principalmente no acesso a dados, onde os testes preliminares começam com um BD praticamente vazio, devemos nos preocupar com os tempos para pesquisa com o aplicativo já a pleno vapor no cliente. A gente ouve bastante coisa, muita opinião "técnica", mas nada como fazer uma bancadinha de testes. Tenho um projeto só pra isso (pra testar a velocidade de funções e de objetos), e uso a classe PerformanceTimer, que é excelente pra medir pequenos lapsos de tempo
Citação:Option Explicit
Public Enum PerformanceValue
pvSecond = 1 's
pvDeciSecond = 10 'ds
pvCentiSecond = 100 'cs
pvMilliSecond = 1000 'ms
pvMicroSecond = 1000000 'µs
pvNanoSecond = 1000000000 'ns
End Enum
Private m_CountsPerSecond As Currency
Private m_Start As Currency
Private m_Stop As Currency
Private m_ApiOverhead As Currency
Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Currency) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As Currency) As Long
Private Sub Class_Initialize()
'Does the system support a performance counter
If QueryPerformanceFrequency(m_CountsPerSecond) Then
Dim i As Long, TotalOverhead As Currency
'Find out how long it takes the system to call the API function
For i = 1 To 1000
QueryPerformanceCounter m_Start
QueryPerformanceCounter m_Stop
TotalOverhead = TotalOverhead + m_Stop - m_Start
Next i
m_ApiOverhead = TotalOverhead / 1000
Else
m_CountsPerSecond = 1
End If
m_Start = 0
m_Stop = 0
End Sub
Public Property Get Supported() As Boolean
'Does the system support a performance counter
Supported = QueryPerformanceCounter(0)
End Property
Public Sub StartTimer()
'Get the start time
QueryPerformanceCounter m_Start
m_Stop = 0
End Sub
Public Sub StopTimer()
'Get the end time
QueryPerformanceCounter m_Stop
End Sub
Public Property Get TimeElapsed(ByVal ReturnAccuracy As PerformanceValue) As Double
'Return the time taken
If m_Start And m_Stop Then TimeElapsed = (m_Stop - m_Start - m_ApiOverhead) / m_CountsPerSecond * ReturnAccuracy
End Property
Não confie em seus instintos! Coloque as funções a serem comparadas na bancada, ponha o starttimer e o stoptimer nos locais adequados e rode!
Poderia descrever melhor como usar esse módulo PerformanceTimer, dando um exemplo de como poderia usá-lo para retornar o tempo de uma query ou algo assim? As funções de Start e Stop, onde as coloco?
por exemplo:
for i = 0 to 10000
teste = i + 100
[txt-color=#ff0000]if len(textbox1.text) = 0 then
textbox1.backcolor = vbred
else
set rs = db.openrecordset("select nome from banco")
textbox1.text = rs("nome")
rs.close
endif[/txt-color]
listbox1.additem teste
next i
nao é incomum ver códigos dentro de loops que não usam nada do loop...
ou seja - a informação é executada n vezes por bobeira...
e se tiver acesso a bd fica mais lento ainda...
Começa com uma analise bem feita do sera o projeto. Apos esta analise ai sim começar a pensar no que desenvolver, como desenvolver, vai rodar em rede, quais recursos vou usar, etc... Pois a escolha errada pode atrapalhar todo o seu projeto ai nem as melhores dicas de otimização nem os melhores codigos irão fazer o seu projeto funcionar bem .
No mais é como o Max falou so testando vc que vc vai ter uma ideia de como o seu projeto esta.
Esta é a minha opinião e o que eu sempre procuro seguir.
Oks,
Rafael Portal
agola outr a pergunta
eu costumo declarar a dimensão das variáveis em command buttons, timers, e eventos comuns isso é errado?
Private sub atualizar_click(Cancel as Integer)
dim valor as integer
dim vetor(5) as string
dim base as long
dim base = 2,2
dim valor = 15
for i = 0 to 5
vetor(i) = base * valor
next i
...
end sub
o tbn ATUALIZAR é utilizado com frequencia, toda vez que ele for clicado, as variáveis são declaradas novamente? isso pode gerar algum pau no meu prog?
devo declarar sempre em Declarations ?
(Aguardo uma resposta técnica)
valeu
http://www.bufaloinfo.com.br/alldicas.asp?codcat=2
Será que algum Moderador do Fórum Poderia colocar este tópico no Topo (Oficial) Só por alguns Dias, estou empolgado com o desempenho do post, e gostaria de deixar ele mais dias...