Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
webserverdan yüksek miktarda veri gelmesi
#1
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.
Cevapla
#2
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;
Cevapla
#3
Serverdan JSon un gelmesi çok zaman almıyorda bu listeyi döngü ile Listboxa aktarmak çok uzun sürüyor.
Cevapla
#4
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
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#5
(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.
Cevapla
#6
Cevaplar için çok teşekkür ederim. Verdiğiniz bilgiler doğrultusunda biraz uğraşayım.
Cevapla
#7
(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.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#8
ListBox'ta virtual mode gibi bir olay var. 1 milyon veriyi işlemesi tahmini bir kaç saniye sürer.
Cevapla
#9
(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.?
Cevapla
#10
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.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  CSV'ye veri aktarma Altıner 5 1.605 28-03-2024, Saat: 11:49
Son Yorum: Mr.X
  Web ipnut alanına veri girme Altıner 4 1.228 12-03-2024, Saat: 21:26
Son Yorum: Altıner
  Android Fmx uzak veri tabanından veri çekmek erkutolga 12 3.675 22-11-2023, Saat: 10:27
Son Yorum: Mesut
  Mobil App. ile MQTT brokera bağlanma ve Veri çekme yemre 3 1.730 27-04-2023, Saat: 13:56
Son Yorum: yemre
  Android veri gönderme hakankvk 3 1.742 29-12-2022, Saat: 18:40
Son Yorum: hakankvk



Konuyu Okuyanlar: 1 Ziyaretçi