Escolar Documentos
Profissional Documentos
Cultura Documentos
de
Zarko Gajic
Atualizado em 19 de julho de 2019
Ao escrever aplicativos de longa duração - o tipo de programa que passará a maior parte do
dia minimizado na barra de tarefas ou na bandeja do sistema , pode ser importante não
deixar o programa "fugir" com o uso da memória.
Aprenda a limpar a memória usada pelo seu programa Delphi usando a função
SetProcessWorkingSetSize da API do Windows.
https://www.thoughtco.com/design-your-delphi-program-1058488 1/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
As duas colunas mais à direita indicam o uso da CPU (tempo) e o uso da memória. Se um
processo impactar severamente em um deles, o sistema ficará lento.
O tipo de coisa que freqüentemente causa impacto no uso da CPU é um programa que está
em loop (pergunte a qualquer programador que tenha esquecido de colocar uma instrução
"read next" em um loop de processamento de arquivo). Esses tipos de problemas geralmente
são facilmente corrigidos.
O uso da memória, por outro lado, nem sempre é aparente e precisa ser gerenciado mais do
que corrigido. Suponha, por exemplo, que um programa de tipo de captura esteja sendo
executado.
Este programa é usado durante todo o dia, possivelmente para captura telefônica em um
help desk, ou por algum outro motivo. Simplesmente não faz sentido desligá-lo a cada vinte
https://www.thoughtco.com/design-your-delphi-program-1058488 2/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
minutos e depois reiniciá-lo. Ele será usado durante todo o dia, embora em intervalos
infrequentes.
Se esse programa se basear em algum processamento interno pesado ou tiver muitos gráficos
em seus formulários, mais cedo ou mais tarde seu uso de memória aumentará, deixando
menos memória para outros processos mais freqüentes, aumentando a atividade de
paginação e, em última análise, tornando o computador mais lento .
https://www.thoughtco.com/design-your-delphi-program-1058488 3/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
Digamos que você irá criar um programa com o formulário principal e dois formulários
(modais) adicionais. Normalmente, dependendo da sua versão do Delphi, o Delphi vai
inserir os formulários na unidade de projeto (arquivo DPR) e incluirá uma linha para criar
todos os formulários na inicialização do aplicativo (Application.CreateForm (...)
As linhas incluídas na unidade de projeto são de design Delphi e são ótimas para pessoas que
não estão familiarizadas com o Delphi ou estão apenas começando a usá-lo. É conveniente e
útil. Isso também significa que TODOS os formulários serão criados quando o programa for
iniciado e NÃO quando forem necessários.
https://www.thoughtco.com/design-your-delphi-program-1058488 4/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
Se "MainForm" for a forma principal do aplicativo, ele precisará ser o único formulário
criado na inicialização no exemplo acima.
https://www.thoughtco.com/design-your-delphi-program-1058488 5/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
https://www.thoughtco.com/design-your-delphi-program-1058488 6/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
Por favor, note que a estratégia descrita aqui é baseada na suposição de que o programa em
questão é um programa do tipo “captura” em tempo real. Pode, no entanto, ser facilmente
adaptado para processos do tipo lote.
O Delphi tentou minimizar isso e tem sua própria arquitetura de gerenciamento de memória,
que usa blocos muito menores, mas isso é praticamente inútil no ambiente Windows, porque
a alocação de memória, em última instância, está no sistema operacional.
Depois que o Windows alocar um bloco de memória a um processo, e esse processo liberar
99,9% da memória, o Windows ainda perceberá que todo o bloco está em uso, mesmo se
apenas um byte do bloco estiver sendo usado. A boa notícia é que o Windows fornece um
mecanismo para limpar esse problema. O shell nos fornece uma API chamada
SetProcessWorkingSetSize . Aqui está a assinatura:
https://www.thoughtco.com/design-your-delphi-program-1058488 7/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
https://www.thoughtco.com/design-your-delphi-program-1058488 8/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
https://www.thoughtco.com/design-your-delphi-program-1058488 9/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
Essa API destina-se a permitir uma configuração de baixo nível dos limites mínimo e
máximo de memória para o espaço de uso de memória do processo. No entanto, tem uma
pequena peculiaridade que é a mais afortunada.
Uma chamada para essa API só será feita em intervalos determinados - não continuamente,
portanto, não haverá impacto algum no desempenho.
Aqui está uma função Delphi de exemplo que envolve a chamada para
SetProcessWorkingSetSize:
procedimento TrimAppMemorySize;
var
MainHandle: THandle;
começam
tentativa
MainHandle: = OpenProcess (PROCESS_ALL_ACCESS, falsa,
https://www.thoughtco.com/design-your-delphi-program-1058488 11/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
GetCurrentProcessID);
SetProcessWorkingSetSize (MainHandle, $ FFFFFFFF, $ FFFFFFFF);
CloseHandle (MainHandle);
exceto
final ;
Application.ProcessMessages;
fim ;
Ótimo! Agora nós temos o mecanismo para cortar o uso da memória . O único outro
obstáculo é decidir quando chamá-lo.
Crie uma variável global para manter a última contagem de toques gravados NO
FORMULÁRIO PRINCIPAL. A qualquer momento em que houver atividade de teclado ou
mouse, registre a contagem de tiques.
https://www.thoughtco.com/design-your-delphi-program-1058488 12/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
var
LastTick: DWORD;
Agora decida qual período de tempo você considerará o programa ocioso. Decidimos por
dois minutos no meu caso, mas você pode escolher qualquer período que desejar,
dependendo das circunstâncias.
Solte um temporizador no formulário principal. Defina seu intervalo para 30000 (30
segundos) e, em seu evento "OnTimer", insira a seguinte instrução de uma linha:
https://www.thoughtco.com/design-your-delphi-program-1058488 13/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
CITAR
Article
Uma Introdução aos Ponteiros e Seu
Uso para Iniciantes Delphi
Article
Alocação de memória pilha vs. pilha
para desenvolvedores Delphi
Article
Con gurando o parâmetro owner
para um objeto Delphi TForm
Article
Termos do glossário do Visual Basic
https://www.thoughtco.com/design-your-delphi-program-1058488 14/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
Article
Article
Construindo a seqüência de
O que é a programação Delphi? conexão de banco de dados
dinamicamente
Article Article
O que você precisa saber para evitar Aqui está como colocar aplicativos
vazamentos de memória do Delphi na bandeja do sistema
aplicativo Delphi
Article
Como descubro meu endereço IP
com o Delphi?
https://www.thoughtco.com/design-your-delphi-program-1058488 15/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
Article
Manipulando Mensagens do
Windows como o caminho Delphi
Article
Usando o TStopWatch para ver os
tempos de execução do processo no
Delphi
Article Article
Entendendo os Arquivos de Projeto Como usar um timer em macros do
do Delphi (DPR) e os Arquivos de Of ce VBA
Origem da Unidade (PAS)
Article
Sobre a programação Delphi para
desenvolvedores novatos
https://www.thoughtco.com/design-your-delphi-program-1058488 16/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
Article Article
Como usar recursos no Visual Basic Como criar, usar e fechar
6 formulários no Delphi
Siga-nos
línguas Recursos
https://www.thoughtco.com/design-your-delphi-program-1058488 17/18
06/08/2019 Otimizando o uso da memória do seu programa Delphi
https://www.thoughtco.com/design-your-delphi-program-1058488 18/18