CONSUMO DE MEMORIA?
Já pesquisei aqui sobre otimização, mas ainda não ficou bem claro, sobre as variáveis, se eu declarar a variável no "general" em vez de uma sub, a variável ficará sempre ocupando espaço na memória, já se for declarado em uma sub, ficará sempre inicializando, mas terminando a sub já retira a variavel da memória? E se eu der um "erase var" no final da sub ou quando sair do form conseguiria eliminar o espaço da variavel na memória? Eu declarando as variaveis em um modulo logo que meu programa inicializar já estará sendo alocado na memória as variáveis e se colocar no form, só irá ocupar espaço na memória quando eu executar o form?
Variaveis declaradas num Módulo ficam ocupando espaço durante toda a execução do programa.
Variáveis declaradas numa Sub ou Function são descartadas quando a Sub ou Função termina.
Variáveis Declaradas num form são descartadas qdo o Form é descarregado (Unload).
Abs
Variáveis declaradas numa Sub ou Function são descartadas quando a Sub ou Função termina.
Variáveis Declaradas num form são descartadas qdo o Form é descarregado (Unload).
Abs
Tamanini
O Consumo exagerado de memória pode decorrer de Declarações erradas de RecordSet e Conections
Como você declara a conexão e os REcordSets?
[s50]
O Consumo exagerado de memória pode decorrer de Declarações erradas de RecordSet e Conections
Como você declara a conexão e os REcordSets?
[s50]
KpellaJr:
Estou fazendo assim:
Declarações em um modulo:
Public rsTBLRun As Recordset, rsTBLFin As Recordset
'Banco de dados principal BDCS2051HT.mdb
Public DMCData As Database
-------
Sub form_load()
Set rsTBLRun = DMCData.OpenRecordset("SELECT * FROM DMCHistRun WHERE Run = " & True & _
" AND DMCNo <> 0 ORDER BY DMCNo,NSec, Right(AnoMesDia,7),Right(AnoMesDia,10), Hora") 'Data")
'
Set rsTBLFin = DMCData.OpenRecordset("SELECT * FROM DMCHistRun WHERE Run = " & False & _
" AND DMCNo <> 0 ORDER BY DMCNo,Right(AnoMesDia,7),Right(AnoMesDia,10), Hora") 'Data")
call funExpRun
call funExpFin
sub funExpRun
If rsTBLRun.RecordCount > 0 Then
rsTBLRun.MoveFirst
Do While Not rsTBLRun.EOF
With lstVbaRunExp
TempNap = rsTBLRun.Fields("DMCNo")
....
rsTBLRun.MoveNext
Loop
rsTBLRun.Close
IvoFabiano:
E se utilizar o "erase" tem algum melhora?
Estou fazendo assim:
Declarações em um modulo:
Public rsTBLRun As Recordset, rsTBLFin As Recordset
'Banco de dados principal BDCS2051HT.mdb
Public DMCData As Database
-------
Sub form_load()
Set rsTBLRun = DMCData.OpenRecordset("SELECT * FROM DMCHistRun WHERE Run = " & True & _
" AND DMCNo <> 0 ORDER BY DMCNo,NSec, Right(AnoMesDia,7),Right(AnoMesDia,10), Hora") 'Data")
'
Set rsTBLFin = DMCData.OpenRecordset("SELECT * FROM DMCHistRun WHERE Run = " & False & _
" AND DMCNo <> 0 ORDER BY DMCNo,Right(AnoMesDia,7),Right(AnoMesDia,10), Hora") 'Data")
call funExpRun
call funExpFin
sub funExpRun
If rsTBLRun.RecordCount > 0 Then
rsTBLRun.MoveFirst
Do While Not rsTBLRun.EOF
With lstVbaRunExp
TempNap = rsTBLRun.Fields("DMCNo")
....
rsTBLRun.MoveNext
Loop
rsTBLRun.Close
IvoFabiano:
E se utilizar o "erase" tem algum melhora?
Outra coisa, vale a pena então, declarar uma variável no declarations de um form e repitir a declaração em outro form em vez de declarar em um modulo como public para os dois forms?
Depende muito da arquitetura que vc desenhou para o seu software. A princÃpio, é jogo declarar num módulo uma variável (Objeto) do tipo Conecction que será utilizada em tofo o projeto, mantendo ou não essa conexão aberta conforme a necessidade (a conexão consome uma parte boa de memória na sua aplicação).
Lembre-se que declarar muitas variáveis com o escopo de visibilidade para todo o projeto (variáveis públicas) não é uma boa prática. Use o bom senso e aplique os escopos conforme haja necessidade.
Abs.
Lembre-se que declarar muitas variáveis com o escopo de visibilidade para todo o projeto (variáveis públicas) não é uma boa prática. Use o bom senso e aplique os escopos conforme haja necessidade.
Abs.
Mas por exemplo eu utilizo uma variavel string em um form de exportação e em outro form também, seria melhor declarar essa variável como public em um modulo, do que declarar no declarations de cada form e ainda utilizar o "erase variavel"?
Essa variavel possui um mesmo conteúdo utiliazado nesses 2 forms ? Esse conteúdo é recuperado a partir de uma query de uma Base de Dados ? Se sim, então é melhor vc declarar como uma var publica, apagando o seu conteúdo assim que o mesmo não for mais necessário.
Veja bam, eu coloquei uma especulação. Repito que tudo vai depender da arquitetura do seu sistema.
Abs
Veja bam, eu coloquei uma especulação. Repito que tudo vai depender da arquitetura do seu sistema.
Abs
Em alguns casos possui o mesmo conteúdo, no qual irei recuperar os dados através de uma query trazendo os mesmos dados que trago no outro form tb.
Já em outros casos não, por exemplo eu utilizo a variavel "icont" para um laço FOR por exemplo que varia em um form de 0 a 20 e em outro form utilizo a mesma variavel em outro laço só que o valor varia de 0 a 50, este deixaria como?
Já em outros casos não, por exemplo eu utilizo a variavel "icont" para um laço FOR por exemplo que varia em um form de 0 a 20 e em outro form utilizo a mesma variavel em outro laço só que o valor varia de 0 a 50, este deixaria como?
?
Variaveis usadas em laços e variaveis auxiliares devem ser declaradas localmente.
Tópico encerrado , respostas não são mais permitidas