Jump to content
perdido_e_sozinho

VB.NET e a memória...

Recommended Posts

perdido_e_sozinho

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


ser.gifsartim.gif

Share this post


Link to post
Share on other sites
AriOps

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


Daniel Correia

Share this post


Link to post
Share on other sites
AriOps

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???


Daniel Correia

Share this post


Link to post
Share on other sites
perdido_e_sozinho

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


ser.gifsartim.gif

Share this post


Link to post
Share on other sites
Asgorath

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


"The Dark Side Clouds Everthing. Impossible To See The Future Is."My rig: Intel Core 2 Quad Q9450 | abit IP35P | 4G Kingston 800 Mhz | XFX GeForce 9800 GX2 1G ddr3 | 2X WD5000AAJS 500Gb Sata 2 | PSU 600W || Caixa El-Diablo | Creative XMod

Share this post


Link to post
Share on other sites
perdido_e_sozinho

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


ser.gifsartim.gif

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.