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:

 
 
 

2 Comments

 
  1. Leo Simas disse:

    Excelente artigo.

    Parabéns mais uma vez.
    Falowzzzzzzzzzzzz

  2. Márcio Schmeling disse:

    Muito bom, exemplo utilizado e aprovado…

    Vlw

    T+

 

Leave a Comment

 

You must be logged in to post a comment.