CONSUMO DE MEMORIA?

TAMANINI 27/05/2005 08:25:08
#85409
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?
IVOFABIANO 27/05/2005 10:36:19
#85444
Resposta escolhida
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
LCSD 27/05/2005 10:47:19
#85449
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]
TAMANINI 27/05/2005 11:00:46
#85456
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?
TAMANINI 27/05/2005 11:07:35
#85459
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?
IVOFABIANO 27/05/2005 16:01:29
#85522
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.
TAMANINI 27/05/2005 17:57:46
#85565
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"?
IVOFABIANO 30/05/2005 09:20:02
#85862
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
TAMANINI 30/05/2005 11:27:27
#85882
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?
TAMANINI 30/05/2005 16:46:14
#85966
?
IVOFABIANO 30/05/2005 18:29:47
#85984
Variaveis usadas em laços e variaveis auxiliares devem ser declaradas localmente.
Tópico encerrado , respostas não são mais permitidas