Listview item ekleme hız sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
carsoft
Üye
Mesajlar: 138
Kayıt: 01 Ağu 2014 12:27

Listview item ekleme hız sorunu

Mesaj gönderen carsoft »

Ben Listview' e ekleme yapıyorum tahminen 5000 giriş var, ama baya zaman alıyor 2 dak gibi daha hızlı nasıl yükleyebilirim.
Kullandığım kod şu şekilde, normalde ne tavsiye edersiniz bu normalmi veya başka yolu varmı.

Kod: Tümünü seç

var
  i : Integer;
  Item: TListItem;
begin
    ListView1.Items.BeginUpdate;
    try
    item:= listview1.Items.Add;
    begin
    item.caption:=Adı;
    item.subitems.Add(Adresi);
    item.SubItems.Add(Müşteri);
    end;
finally
   ListView1.Items.EndUpdate;
end;
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Listview item ekleme hız sorunu

Mesaj gönderen brs »

Kod: Tümünü seç

with ListView1.Items.Add do
          begin
            Caption := IntToStr(ListView1.Items.Count);
            SubItems.Add(DocumentElement.ChildNodes['pass'].Text);
Next;          end;
         
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
carsoft
Üye
Mesajlar: 138
Kayıt: 01 Ağu 2014 12:27

Re: Listview item ekleme hız sorunu

Mesaj gönderen carsoft »

değişen birşey yok aynı
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Listview item ekleme hız sorunu

Mesaj gönderen SimaWB »

Yazdığınız kodları her bir Item eklemede kullanıyorsanız sıkıntı olur. Yani siz 5000 giriş için döngüyü nasıl-nerede yapıyorsunuz?
There's no place like 127.0.0.1
carsoft
Üye
Mesajlar: 138
Kayıt: 01 Ağu 2014 12:27

Re: Listview item ekleme hız sorunu

Mesaj gönderen carsoft »

döngüyü başka bir formdan syncronize ederek alıyorum bu forma
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Listview item ekleme hız sorunu

Mesaj gönderen SimaWB »

Yukarıda yazdığınız kodları başka bir döngü içerisinden her defasında çağıyorsanız çok çok yavaş olur.
Fakat şu şekilde kullanıyorsanız:

Kod: Tümünü seç

ListView1.Items.BeginUpdate;
try
    for i:= 1 to 5000 do
    begin
      item := listview1.Items.Add;
      item.caption := Adi;
      item.subitems.Add(Adresi);
      item.SubItems.Add(Müşteri);
    end;
finally
   ListView1.Items.EndUpdate;
end;
ve buna rağmen performanstan memnun değilseniz ListView'ı virtual mode'da kullanmalısınız.
Bununla ilgili internette örnekler vardır.(Bulamazsanız yardımcı olmaya çalışırız)
Delphi'nin de hazır örneği vardı ama bulamadım :(

Yada Virtual Treeviewı kullanabilirsiniz.
There's no place like 127.0.0.1
Cevapla