Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

robsonbrumatt

Criar class para limpar memoria no momento que desejar

Recommended Posts

Ola pessoal! Sei que o .Net automaticamente limpa a memoria mas, isso não esta sendo muito viável para mim. Procurei algo na net e achei esse link = http://forum.zwame.pt/showthread.php?t=102483. Tentei fazer funcionar mas não tenho tido sucesso. Passo abaixo o código que estou usando e se alguém pode me dizer no que estou errando, ficarei agradecido.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace Arauto.Regras
{
public class GerenciaMemoriaREG
{
[DllImportAttribute ("kernel32.dll")]
public static extern int SetProcessWorkingSetSize(System.IntPtr process, int minimumWorkingSetSize, int maximumWorkingSetSize);
public void MemoryManagement()
{
}
public void FlushMemory()
{
GC.Collect();
GC.WaitForPendingFinalizers();
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
SetProcessWorkingSetSize(process.GetCurrentProcess().Handle, -1, -1);
}
}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não eu não destruo os objetos não. Na verdade não sei como se faz. Apenas deixo o sistema limpar através do Garbage. Se puder me dar uma dica fico agradecido.

 

O App que estou desenvolvendo vai tratar com imagens em BMP e Jpeg. Em vários tamanhos e qualidades que podem ser carregadas em listas. Exibidas em controles etc. Um simples carregamento de um lista pode demorar um tempo razoável. Para esse caso trabalho reduzindo a qualidade das imagens. Ou seja carrego as imagem em menor qualidade ficando rápido. Com a lista ja na tela apresentando a imagem corrente, então o usuário pode escolher ver todas as imagens numa qualidade melhor ai ele escolhe isso na tela e o carregamento e realizado de forma lenta mais o usuário ja ta preparado para isso e tudo bem.

 

Bem, mencionei apenas algumas necessidades para você entender. No momento não tenho problemas de memoria mas percebo que durante o meu processo de programação e utilização do meu pc, a memoria vai enchendo, percebo isso pois tenho um medidor na tela e ele chega a 97% simplesmente por estar trabalhando. Nesse momento quando rodo o App e solicito o carregamento de uma lista, ate então sem problemas, a lista não e carregada. Eu descarrego a memoria com um aplicativo externo e o App que estou criando funciona sem problemas. Por esse motivo busco uma classe para limpeza de memoria para executar antes de realizar o carregamento de uma listagem de imagens por exemplo. Pois não sei como vai estar a memoria do pc onde o App esta sendo rodado e for executar essa função.

 

Por usar o Try... no momento do erro App não e paralisado, no caso ele me passa essa informação " Tentativa inválida de chamar IsDBNull quando o leitor estava fechado " que não consigo tratar até o momento. De qualquer forma o sistema não executa o carregamento da lista até eu esvaziar a memoria do pc com um app externo. Depois de esvaziar a memoria o meu App funciona corretamente sem nenhuma interversão nele. Este e o motivo da minha necessidade.

 

Sei do Garbage e sei do Dispose, mais o carregamento da memoria ocorre pelo uso natural do pc. Outro motivo que me leva a entender que preciso descarregar a memoria.

 

Bem, estou aberto a indicações e desde já obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A solução que funciona e com o uso de um app que tenho. Um app de outro fabricante. Um outro programa. Eu tenho que ter essa mesma solução no programa que estou desenvolvendo. Percebo que outros programas que uso quando iniciam eles também limpam a memoria. Preciso que o meu faça isso também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.