Delphi Can
webserverdan yüksek miktarda veri gelmesi - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: webserverdan yüksek miktarda veri gelmesi (/showthread.php?tid=5531)

Sayfalar: 1 2


webserverdan yüksek miktarda veri gelmesi - barissagir - 15-12-2020

Merhaba arkadaşlar

Web Server dan 10.000 adet lik bir JSON ı alıp FDMemtable aktarıyorum.

Burdan da listboxa döngü ile aktardığımda ise hayli vakit alıyor.

Netten araştırdığıma göre threat kullanmalıymışım.

Anladığım kadarı ile 10.000 adet kaydı parti parti yüklemeliyim.
Nasıl yapabilirim.

Örnek olarak Hepsiburada veya Sahibinden.com un uygulamalarında
Listboxı aşağı doğru kaydırdıkça yeni veri yükleniyor.


Cvp: webserverdan yüksek miktarda veri gelmesi - Mr.Developer - 15-12-2020

Merhaba,
Bu şekilde bende json verilerimi almaktayım. ha doğru ha hatalı emin değilim. Thread'ı derinlemesine bilen birisi olmadığım için yorumlayamayacağım.

  TThread.CreateAnonymousThread(
   procedure()
   begin
     TThread.Synchronize(nil,
       procedure()
       begin
       // Bekletme başlangıç
       end);
     try
       TThread.Queue(nil,
         procedure()
         begin
         // Json işleme
         end);
       TThread.Queue(nil,
         procedure()
         begin
          // döngü
         end);
     finally
       TThread.Synchronize(nil,
         procedure()
         begin
          // Bekletme bitiş
         end);
     end;
   end).start;



webserverdan yüksek miktarda veri gelmesi - barissagir - 15-12-2020

Serverdan JSon un gelmesi çok zaman almıyorda bu listeyi döngü ile Listboxa aktarmak çok uzun sürüyor.


webserverdan yüksek miktarda veri gelmesi - mrmarman - 15-12-2020

API'lerini yeniden araştırın. Pagination ( sayfalama ) terimi ile arama yapın. bir offset ( başlama ) değeri (örneğin 0 ) bir de limit ( sayı ) değeri ( örneğin 50 ) verilir. Bir sonrakinde offset 51 limit yine 50 gibisinden


Cvp: webserverdan yüksek miktarda veri gelmesi - hayalyilmaz43 - 15-12-2020

(15-12-2020, Saat: 17:13)barissagir Adlı Kullanıcıdan Alıntı: Serverdan JSon un gelmesi çok zaman almıyorda bu listeyi döngü ile Listboxa aktarmak çok uzun sürüyor.

sanırım söylediğiniz;

listbox1 içine ilk etapda 100 kayıt ekleyip, scrollbox un kaydırma pozisyonuna bakarak, eğer en aşşa konuma yakın bir pozisyonda ise listbox a yeni itemleri ekletme.

ancak sizin recordlarınız arttıkça, program belleğinde tutacağınız veride artacak, listbox a ekleyerek veri boyutunu 2 ye katlıyorsunuz, normalde veritabanından blok blok aralıklı limit 100,200 gibi yapılarla json almanız, scroll aşşa geldi ise
yeni aralığı istemeniz daha mantıklı olurdu, hem böylelikle veritabanı sunucu loadlarınada yüklenmemiş olurdunuz.

bildiğim kadarıyla dbtablo componentleri bu söylediklerinizi otmatik yapıyor zaten.


webserverdan yüksek miktarda veri gelmesi - barissagir - 16-12-2020

Cevaplar için çok teşekkür ederim. Verdiğiniz bilgiler doğrultusunda biraz uğraşayım.


Cvp: webserverdan yüksek miktarda veri gelmesi - hi_selamlar - 16-12-2020

(15-12-2020, Saat: 16:47)barissagir Adlı Kullanıcıdan Alıntı: Merhaba arkadaşlar

Web Server dan 10.000 adet lik bir JSON ı alıp FDMemtable aktarıyorum.

Burdan da listboxa döngü ile aktardığımda ise hayli vakit alıyor.

Netten araştırdığıma göre threat kullanmalıymışım.

Anladığım kadarı ile 10.000 adet kaydı parti parti yüklemeliyim.
Nasıl yapabilirim.

Örnek olarak Hepsiburada veya Sahibinden.com un uygulamalarında
Listboxı aşağı doğru kaydırdıkça yeni veri yükleniyor.

Merhabalar,

Sadece merakımdan bir soru yöneltmek isterim izninizle.
10.000 adet kaydı ListBox'a aktarmanızda ki amaç nedir?

Teşekkürler.


webserverdan yüksek miktarda veri gelmesi - engerex - 16-12-2020

ListBox'ta virtual mode gibi bir olay var. 1 milyon veriyi işlemesi tahmini bir kaç saniye sürer.


Cvp: webserverdan yüksek miktarda veri gelmesi - barissagir - 16-12-2020

(16-12-2020, Saat: 15:36)engerex Adlı Kullanıcıdan Alıntı: ListBox'ta virtual mode gibi bir olay var. 1 milyon veriyi işlemesi tahmini bir kaç saniye sürer.

Kendi tasarladığım frame i kullanmak istediğim için virtual mode kullanmadım.

(15-12-2020, Saat: 17:34)mrmarman Adlı Kullanıcıdan Alıntı: API'lerini yeniden araştırın. Pagination ( sayfalama ) terimi ile arama yapın. bir offset ( başlama ) değeri (örneğin 0 )   bir de limit ( sayı ) değeri ( örneğin 50 ) verilir. Bir sonrakinde offset 51 limit yine 50 gibisinden

Merhabalar,

Programda listbox yerine VScrollBox in içine FlowLayout kullandım. Kendi tasarladığım Frame dediğiniz gibi 100 er 100 er kaydı çekerek Flowlayout a ekledim.

her 100 kaydı VScrollBox ın son  değerine gelince ViewportPositionChange olayı ile yükledim.

procedure TislerF.VertScrollBox1ViewportPositionChange(Sender: TObject;
 const OldViewportPosition, NewViewportPosition: TPointF;
 const ContentSizeChanged: Boolean);
begin
 if CompareValue(NewViewportPosition.Y, FlowLayout2.Height-VertScrollBox1.Height)=EqualsValue then
   begin
   islerF.isleriAl('ORDER BY id LIMIT 100 OFFSET ' + islerUNT.KayitNo.ToString);

   end;
end;



Ancak her eklenen 100 kayıt ile birlikte VScrollBox ın degeri yine en sonda duruyor. Vscrollbox yeni eklenen kayıtları göstermiyor. Windowsta formu el ile resize edince diğer kayıtlar geliyor.
Yükleme yaptıkran sonra VScrollBox nasıl güncelleyebilirim?
Bunun için bir çözüm önerebilir misiniz.?


webserverdan yüksek miktarda veri gelmesi - hayalyilmaz43 - 16-12-2020

kaydırmanın konumunu; OnViewportPositionChange daki NewViewportPosition.X/Y ile alınabiliyor idi, bir globel değişkene oradaki rakamı x,y pos u atayabilirsiniz, itemler yüklendikden sonrada, box.ViewportPosition:=PointF(kaydırılacakX, kaydırılacakY) gibi bir yapı ile eski konumuna döndürebilirsiniz sanırım.