• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

perdido_e_sozinho

VB.NET e a memória...

9 mensagens neste tópico

Já repararam quanto é que uma form de VB.NET ocupa em memória?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pelo menos a que estou a fazer agora tá a ocupar-me prai 10 megas sem exagero...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Minimiza a form e volta a maximizar!

Com quanto ficas?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pera tenho de iniciar outra vez, já edito este post

edit: No começo afinal é 21.512 Megas

Depois de minimizar e maximizar é 3.704???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No Visual Basic .NET ao contrário do VB6 temos que limpar a memória. Para isso usa-se o Garbage Colector.

Quantos mais objectos a form tiver, mais forms se abrir e mais se usar mais incha.

Se repararem o Visual Studio tb incha, chega a atingir 400MB, pois isso vou minimizando de vez em quando. :)

Para um uso correcto da memória deve-se limpar uma variável sempre que já não é necessária.

Exemplo:

Dim frm as new form

frm.show

'== Isto limpa a variável ==

frm.dispose

frm=nothing

Para limpar a memória usa-se o GC ou Garbage Colector.

No xp não há problema da aplicação inchar, uma vez que a memória também incha, mas no 98 isso é problemático.

Aqui fica um truque muito útil e que resolve este problema.

Criem um Modulo a coloquem este código

Private Declare Function SetProcessWorkingSetSize Lib "kernel32.dll" ( _

ByVal hProcess As IntPtr, _

ByVal dwMinimumWorkingSetSize As Int32, _

ByVal dwMaximumWorkingSetSize As Int32 _

) As Int32

Public Function SaveMemory() As Int32

Return _

SetProcessWorkingSetSize( _

Diagnostics.Process.GetCurrentProcess.Handle, _

-1, _

-1 _

)

End Function

Em seguida no fim de cada sub coloquem SaveMemory() ou criem um timer que de x em x segundos limpe a memória.

As aplicações passam a usar entre 800 k e 5 MB contra os habituais 20MB - 200MB

Antes de descobrir este truque eu cheguei a ponderar refazer um programa em VB6 pois o programa em VB.NET rebentava em Windows98. Mas após usar isto o problema foi resolvido a passei a não me preocupar com a memória no Windows nas Aplicações VB. É seguro e simples, o que querem de melhor?

:D :D :D :D

Com os melhores cumprimentos,

Sérgio Matias

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sergio, chamar SetProcessWorkingSetSize forca parte da memoria allocada pela tua aplicacao a ser escrita para o disco o que afecta a performance de maneira negativa.

No winXp, win2000, e superior deixa o GC fazer o seu trabalho e não se preocupem com a memoria afixada pelo task manager que não é preciso.

Atentamente

Jorge

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Segundo o que me indicaram já à algum tempo este método simula o que acontece quando a aplicação é minimizada, no diz respeito à memória. Em alguns casos que me já conteceram tive problemas com a gestão de memória do GC, não em XP ou 2000, mas em 98, visto que este não eliminava alguns residuos de memória.

Posso estar enganado mas este método permite remover alguma memória residual, visto que se a aplicação por exemplo num dado momento está a usar 120 MB após este processo passa a usar por exemplo 2MB, e quando é chamado um novo procedimento passa por exemplo a 20 MB.

Já me aconteceu com uma aplicação que lida com 3000 registos com muito informação ao mesmo tempo acumular mais de 500MB de memória, e o computador não efectuar uma gestão correcta da memória. (De facto acho que continua a ser um grande problema do .net 2005, pois o IDE do VB 2005 Express chega a carregar-me 700MB de memória, que não visíveis em processo nenhum.)

De facto posso estar a menospresar o GC, mas não existe muita informação na internet sobre a melhor maneira de o utilizar. Talvez se me demonstrar como o posso usar de forma mais correcta e realmente eficaz eu deixe de utilizar este método, que confesso é muito pouco ortodoxo, mas como sei não é necessáriamente o mais correcto ou eficaz.

Espero então que me possa ajudar a ganhar mais e melhores conhecimentos.

Com os melhores cumprimentos,

Sérgio Matias

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora