QUICK TIP: Aumentando a velocidade na adição de items em uma ListBox

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (3)  (0)

A adição de um grande número de itens a uma Listbox pode ser um processo demorado, pois ela é redesenhada a cada item adicionado. Pode-se fazer com que isto não aconteça. Outros componentes como TreeView e ComboBox também suportam.

A adição de um grande número de itens a uma ListBox pode ser um processo demorado, pois ela é redesenhada a cada item adicionado. Pode-se fazer com que isto não aconteça, utilizando a mensagem do Windows WM_SETREDRAW. Ao emitir esta mensagem com WParam igual a 0, estará impedindo que as mudanças no componente sejam redesenhadas e estará reabilitando as mudanças quando se passa 1 em WParam. O código abaixo apresenta um modelo para melhor entender.
  ListBox1.Perform(WM_SETREDRAW,0,0);
  try
    for I:=0 to 10000 do
      ListBox1.Items.Add(IntToStr(I));
  finally
    ListBox1.Perform(WM_SETREDRAW,1,0)
  end;
Outros componentes como TreeView e ComboBox suportam esta mensagem e podem aproveitar essa mesma rapidez e performance na adição de grandes quantidades de itens. Além da rapidez (o processo ficou até 7 vezes mais rápido que o convencional) também houve um ganho considerável de desempenho (a utilização do processador foi até 4 vezes menor).
Deixei disponível programinha com o código que demonstra de uma forma bem prática a diferença em milissegundos do tempo dispensado para realizar a inserção dos items.
A todos um grande abraço e até a próxima.
 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?