scorpio 7 Denunciar post Postado Novembro 26, 2010 Tenho um "sisteminha", ele possui várias threads "eternas". Cada uma destinada a uma função do sistema. Dentro das threads acesso determinados arquivos do computador(tanto para leitura quanto para escrita), coleto informações dos drivers, manipulo vetores, em alguns casos grava informações em um banco de dados PostgreSQL. O problema que está ocorrendo, é que quanto mais tempo o sistema fica ativo, mais ele consome de memória. Quando o aplicativo é aberto, em geral, consome em torno de 30mb. Após umas 8~10 horas, chega a consumir 110mb. (isso visto através do gerenciador de tarefas) Em alguns casos aparace OutOfMemory. :( Sei que todas as operações em todas as threads podem causar isso. Mas como contornar ou pelo menos diminuir esse tipo de situação. Ao invés de vetores utiliza os Collections/IList? Pensei um utilizar o Garbage Collection. Mas em quase todos os sites que encontrei falando sobre diz que não é um "boa prática" forçar o coletor a trabalhar, mas não entendi o porque. Então fiquei com um pé atrás. O que eu poderia alterar para no minimo diminuir essas situações? Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Novembro 27, 2010 Em nenhum momento é feito o Dispose desses objetos? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
scorpio 7 Denunciar post Postado Dezembro 3, 2010 Então, dei uma olhada no programa e realamente em alguns lugares os objetos não estavam com Dispose. Coloquei, mas não adiantou. Continuou subindo a memória. Compartilhar este post Link para o post Compartilhar em outros sites
scorpio 7 Denunciar post Postado Dezembro 8, 2010 Acredito que encontrei o problema. Parece estar numa parte em que carrego um assembly. Leio, do disco, um EXE (.Net também) para recuperar todos os bytes (ReadAllBytes) Depois carrego utilizando o Assembly.Load(__bytes) Bom, me parece estar por ai. Ainda não pude olhar atentamente para isso. Até por que os testes são lentos... 8, 10 horas... Compartilhar este post Link para o post Compartilhar em outros sites