MELHORAR O USO DE MEMORIA

PAVILLION 25/07/2010 10:41:31
#348370
Galerinha VBmaníaca...

Estou com certos problemas, que não é de hoje...Mas como vou começar a desenvolver um projeto mais robusto agora,
resolvi [Ô]investigar[Ô] o que pode ser feito a respeito....O problema é o seguinte, muitas das aplicações que crio, acho que
utilizam mais memória do que deveria e não acho isso muito agradável...Já pensei que isso seria por causa das declara-
ções de variáveis ou algo do tipo, mas já fiz um [Ô]Projeto-teste[Ô] revisando todas as variáveis para ver se eu estava exage-
rando em alguma parte, mas não...Seria essa uma própria característica da linguagem, por causa do Framework?
Ou o pessoal tem algum método, dica, etc...Para melhorar esse problema...?
Agradeço a ajuda de todos....
NETMANIA 25/07/2010 13:41:12
#348386
Resposta escolhida
Uma coisa que notei que as vezes se torna vilão em aplicações que descobri em um programa que desenvolvir era o stringbuilder. O que acontecia, como eu tinha uma consulta que eu precisava montar de modo dinâmico e quando eu comecei a fazer testes de carga, o programa começou a devorar a memória do programa. Após alterar o programa para usar variável concatenável, o consumo de memória ficou menor e mais estável.

Outra coisa, não tente carregar um datataset de uma vez (principalmente uma carga grande de dados do banco), depois não descarregar ele da memória, isso também detona a memória.
JONATHANSTECKER 26/07/2010 08:06:59
#348434
No Projeto Restaurante.NET o Luis havia passado essa dica de concatenação... E fui conferir para ver a diferença...
Realmente dá uma diferença gigantesca...Usando a concatenação StringBuilder levou 3 MiliSegundos, já com a concatenação comum (&) levou 50 Segundos.é uma diferença realmente considerável. Muito boa dica.

DICA - Otimização de Concatenação com Strings (muito mais rápido)


Sub ConfereConcatenacao()

Dim Tempo As New Stopwatch
Dim ts As TimeSpan

Dim s As String = [Ô][Ô]
Dim sb1 As New System.Text.StringBuilder

[ô] #####
MsgBox([Ô]Iniciando concatenação stringbuilder[Ô])

Tempo.Start()
For i As Integer = 0 To 100000
sb1.Append(i.ToString).Append([Ô] [Ô])
Next
Tempo.Stop()

ts = Tempo.Elapsed
MsgBox(String.Format([Ô]{0:00}:{1:00}:{2:00}.{3:00}[Ô], ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10))

Tempo.Reset()

[ô] #####
MsgBox([Ô]Iniciando concatenação comum com (&)[Ô])

Tempo.Start()
For i As Integer = 0 To 100000
s &= i.ToString & [Ô] [Ô]
Next
Tempo.Stop()

ts = Tempo.Elapsed
MsgBox(String.Format([Ô]{0:00}:{1:00}:{2:00}.{3:00}[Ô], ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10))
[ô] #####

MsgBox([Ô]Terminou[Ô])

End Sub

PAVILLION 26/07/2010 18:57:03
#348545
NETMANIA...

Obrigado pela dica...A parte do banco de dados eu já tenho esse costume, não tenho problemas nessa parte...
Mas já a parte de usar variáveis concatenáveis não sabia...Vou olhar mais sobre e começar a implantar...

JONATHANSTECKER

Poxa, que diferença hein...Não tive tempo para testar o código que me mostrou...
Mas vou dar uma olhada assim que puder...Obrigado também pela dica...


Se alguém mais souber de alguma coisa, o tópico está aberto...

Abraços...
PAVILLION 31/07/2010 17:05:08
#349063
é Galerinha...

Testei as dicas e realmente há uma melhora considerável, gostei da utilização
das variáveis concatenáveis...Dá muita diferença...
Outra dúvida que surgiu foi: A utilização de Dll[ô]s ajuda na redução do uso da memória?
Utilizando Dll[ô]s, elas afetam de que forma o desempenho?

Se alguém souber algo sobre, gostaría de saber também...
PAVILLION 07/09/2010 19:44:35
#352426
Encerrando o tópico...

Obrigado Netmania e Jonathanstecker, me ajudaram bastante...
Tópico encerrado , respostas não são mais permitidas