![]() |
|
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 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. |