listview scroll yavaşlığı

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
Kullanıcı avatarı
mustafasoy
Üye
Mesajlar: 154
Kayıt: 02 Ağu 2013 05:00
Konum: istanbul
İletişim:

listview scroll yavaşlığı

Mesaj gönderen mustafasoy »

Merhaba daha önceki mesajımda listview ve listbox arasındaki hız farkından bahsetmiştim listboxu küçük veriler listview için daha büyük verilerde kullanılabilir olduğunu embercadero bahsediyordu hız farkı bununla alakalı diyordum ki projede listview kullanmamla beraber aynı yavaşlığın onda da olduğunu gördüm
web servis kullanıyorum aldığım bilgileri dönüyor ve listview içerisine ekliyorum artık webservisle bir bağlantım kalmıyor peki bu yavaşlığın sebebi ne olabilir?
listview içerisine web servis kullanmadan veri eklediğimde sorunsuzca hızlı kullanabiliyorum ancak web servisten veri aldığımda kilitlenmeler düşünmeler beklemeler ortaya çıkıyor aşağıda uyguladığım kod cümlesini gönderiyorum umarım ufak bir müdahale ile çözülür

procedure Tfrm_Main.cb_durum2Change(Sender: TObject);
var
LItem: TListViewItem;
I: Integer;
srvarizalistesi:ArrayOfServisarizalistesi;
ws:Service1Soap;

begin
ListView2.Items.Clear;
ListView2.BeginUpdate;
ws:=GetService1Soap(true,'',nil);
srvarizalistesi:=ws.servisarizagetir(wmkod,strtoint(sl_durum_id[cb_durum2.ItemIndex]));

for I := 0 to Length(srvarizalistesi)-1 do
begin
LItem := ListView2.Items.Add;
LItem.Text :=inttostr(srvarizalistesi.servis_id)+' - '+
srvarizalistesi.ariza_tanim;
LItem.Detail:='Servis No'+#9+ ': '+ inttostr(srvarizalistesi.servis_id)+#13+
'Makina'+#9+': '+srvarizalistesi.makinatanim+#13+
'Not'+#9+': '+srvarizalistesi.notu;
LItem.Detail:=LItem.Detail+#13+srvarizalistesi.notu;
end;
ListView2.EndUpdate;

end;
http://www.mustafasoy.com.tr
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Kullanıcı avatarı
barisatalay
Üye
Mesajlar: 398
Kayıt: 02 Nis 2013 05:43
İletişim:

Re: listview scroll yavaşlığı

Mesaj gönderen barisatalay »

Detail olayını hiç kullanmadım ne işe yarıyor ekranda gösteriyor mu ?

Manuel listview doldururkende 2 kere .detail dolduruyor musunuz ?

Bu manuel işlemde webserviste gelen veriler ile aynı uzunluktamı ?
gaus
Üye
Mesajlar: 227
Kayıt: 14 May 2014 07:36
İletişim:

Re: listview scroll yavaşlığı

Mesaj gönderen gaus »

Aslında listview yavaşlığı değil onun içine doldurmak istediğiniz anda ki işlemlerin yavaşlığı mevzu burada
Bununda nedeni web servisden aldığınız andaki yavaşlık bununda önüne HTTPRIO kullnarak geçebilirsiniz
HTTPRIO ile yüklemeyi deneyin verilerinizi

Kod: Tümünü seç

ws:=GetService1Soap(true,'',nil); 

dikkatimi çekti
Şimdi öncelikle;
bir HTTPRIO ile çalışın ve

Kod: Tümünü seç

ws:=GetService1Soap(false,'',HTTPRIO);
,
yapacaksınız
HTTPRIO'nun afterexecutuna

Kod: Tümünü seç

 SOAPResponse: TStream);
 var
  Temp: TStringStream;
  xml:txmldocument;
  xmlnode:ixmlnode;
  s:string;
begin
  Temp := TStringStream.Create('');

  try

    Temp.CopyFrom(SOAPResponse, 0);

    GLOBAL_SOAPRESULTSTR:=Temp.DataString; //xml parse işlemi için
    resultxmlbul();//bu node bulma fonksiyonu parse işlemi için
  finally

    Temp.Free
  end;

end;
yapın
GLOBAL_SOAPRESULTSTR bir string ifadedir ve bu stringe HTTPRIO' dan gelen xmli yüklüyoruz.

elinize bir xml gelecek geriye bunu parse etmek kalacak.Bununla da ilgili parse ettikten sonra muherrem hocanın ObjectOlustur adlı bir procedururu vardı onuda bir inceleyin
Ben bunları uygulyarak oldukça hızlı bir şekilde işlem yapıyorum fakat listviewa 5000 tane item eklemeye kalktığınız zaman donma olabilir bununda çözümü bir Thread yapısı kullanarak işin içinden çıkmak olacaktır
Scrol yavaşlığı değil de scrol bozukluğu var listviewda
Bunu da önlemenin yolunu henüz bulamadık
En son gaus tarafından 15 Ağu 2014 03:09 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
mustafasoy
Üye
Mesajlar: 154
Kayıt: 02 Ağu 2013 05:00
Konum: istanbul
İletişim:

Re: listview scroll yavaşlığı

Mesaj gönderen mustafasoy »

barisatalay yazdı:Detail olayını hiç kullanmadım ne işe yarıyor ekranda gösteriyor mu ?

ekranda göstermediğin yada göstermediğin bilgiyi kullanabiliyorsun örneğin adı soyad bilgilerini text inde gösterdin kullanıcı itemclick yaptığı zamanda detayını gösteriyorsun

Kod: Tümünü seç

ShowMessage(ListView2.Items[ListView2.ItemIndex].Detail);
gibi


Manuel listview doldururkende 2 kere .detail dolduruyor musunuz ?
aynı döngü içerisinde dolduruyorum

Bu manuel işlemde webserviste gelen veriler ile aynı uzunluktamı ?
evet aynı uzunlukta diyebiliriz 20 şer karakter diyebilirim
http://www.mustafasoy.com.tr
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
.ılgın
Üye
Mesajlar: 51
Kayıt: 02 Tem 2014 02:24

Re: listview scroll yavaşlığı

Mesaj gönderen .ılgın »

ben detail kısmını bu listelenen nesnelerin yanında kullandım mesela <,> gibi işaretleri kullandım
gaus
Üye
Mesajlar: 227
Kayıt: 14 May 2014 07:36
İletişim:

Re: listview scroll yavaşlığı

Mesaj gönderen gaus »

Sayın mustafa ersoy dediğimi uyguladınız mı
Cevapla