Procurando Objetos pelo Nome
Quando se precisa buscar um objeto pelo nome, alguns desenvolvedores derivam seus objetos de TComponent para fazer a busca com FindComponent, o problema deste método é que TComponent deriva de TPersistent que implementa a capacidade de ser Streamable e TComponent implementa integração com a IDE, suporte a COM e várias outras características que fazem ser simples utilizar componentes no Delphi, mas isto tudo deixa o objeto pesado, o famoso “overhead”.
Se você não estiver desenvolvendo componentes, sugiro a implementação de uma lista para o registro utilizando hash para otimizar a busca e um objeto comum que se auto registra com pelo menos a propriedade Name.
Desta forma é só herdar os objetos deste “TNamedObject” e quando precisar fazer a busca pelo nome chamar ObjectRegister.Find(‘ObjectName’);
Criei uma unit chamada ObjectRegister.pas onde implementei dois objetos TNamedObject e TObjectRegister, também
tem uma variável RegisterObject: TObjectRegister que é criada na Initalization e destruída na Finalization.
Ex:
uses ObjectRegister;
var
LObjeto1: TNamedObject;
LObjeto2: TNamedObject;
begin
LObjeto1:= TNamedObject.Create('Objeto1');
LObjeto2:= RegisterObject.Find('Objeto1');
end;
Neste exemplo, LObjeto2 apontará para a instância de LObjeto1, simples, leve e prático.
Para testar a eficiência deste método fiz um programa teste, com 2 botões cliquei no primeiro e criei 10.000 TComponent depois fechei o programa, executei novamente e criei 10.000 TNamedObject, vejam os resultados:
Tempo
Memória para criar para destruir
Somente o programa : 3804 K - -
10.000 TComponent : 4488 K 10.906 ms 31.516 ms
10.000 TNamedObject: 4396 K 32 ms 281 ms
Como podem ver, a economia de memória é pouca, mas o ganho em performace é incomparável, e a explicação é que TComponent faz muitas notificações e TNamedObject só fará os que você precisar.
Download do código fonte:
- “ObjectRegister.pas”: http://www.cesarromero.com.br/download/ObjectRegister.pas
- “Programa Teste”: http://www.cesarromero.com.br/download/NamedObject.zip

2 Comments
Excelente artigo.
Parabéns mais uma vez.
Falowzzzzzzzzzzzz
Muito bom, exemplo utilizado e aprovado…
Vlw
T+