klaygomes 0 Denunciar post Postado Setembro 12, 2007 E ai pessoal, boa tarde? Estou com o seguinte problema: Desenvolvi um pequeno windows service que inicia processo de importação de dados de uma base para outra em MySQL... Bem, até ai tudo bem, o problema fica na quantidade de memoria que este serviço esta consumindo! Quando é carregado (antes de disparar a sequencia de importação) consome menos de 1MB e logo após chega a quase 90 MB's!!! Para tentar sanar isto, inclui uma chamada ao metodo GC, só que isto não esta resolvendo... O código do service se resume hoje a isto: engine = new rotinasAtualizacao(); engine.ImportaRegistros(); engine = null; System.GC.Collect(); A classe rotinasAtualizacao, é uma classe especializada que herda de mais outras 3 classes mais gerais (Uma para conexão com servidor MySQL, outra para o servidor ARS e uma outra qeu possui algumas propriedades e metodos comuns as duas) e nada mais!! Não entendo porque não esta voltando ao normal... Alguém poderia me dar uma luz? Srá que existiria algum atributo, metodo, propriedade que fizesse isto para mim de uma forma mais eficiente? Obrigado :) Compartilhar este post Link para o post Compartilhar em outros sites
eriva_br 7 Denunciar post Postado Setembro 12, 2007 você esta fechando as conexões? fechando os arquivos que esteja lendo?se usa o datareader feche ele com o .close() senão a conexão fica abertat++ Compartilhar este post Link para o post Compartilhar em outros sites
klaygomes 0 Denunciar post Postado Setembro 12, 2007 Otima pergunta...Sim claro, estou tomando cuidado em fechar todas as conexões que faço (para falar a verdade são apenas 3)...E tanto no Commands como noas conexões estou chamando Dispose para liberar os recursos...O que é mais estranho é que, com o passar do tempo a aplicação vai liberando memoria (agora por exemplo esta consumindo 10mb's)... Sei que o garbage collection esta fazendo o seu trabalho, só queria agilizar seu trabalho. Compartilhar este post Link para o post Compartilhar em outros sites
klaygomes 0 Denunciar post Postado Setembro 12, 2007 Estou chegando lá... Dei uma vasculhada na internet e cheguei isto: rotinasAtualizacao engine = new rotinasAtualizacao(); engine.ImportaRegistros(); engine = null;[DllImport("kernel32.dll")]private static extern int SetProcessWorkingSetSize(IntPtr process, int minimumWorkingSetSize, int maximumWorkingSetSize);GC.Collect();GC.WaitForPendingFinalizers(); if (Environment.OSVersion.Platform == PlatformID.Win32NT) SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1); Agora o processo vai de 100Mbs para menos de 15 (apos a execução)... Só que ainda não esta bom =\ Será que tem como melhorar? ou é o máximo que eu vou conseguir? :( Compartilhar este post Link para o post Compartilhar em outros sites
eriva_br 7 Denunciar post Postado Setembro 13, 2007 putz melhorou bem de 100 p/ 15valew a dica Compartilhar este post Link para o post Compartilhar em outros sites