Firedac Update Çok Yavaş (Çözüldü)
-
ozgunlu bunu yazdımasteryoda bunu yazdı
Bir örnek olsa daha rahat anlaşılırdı. böyle şu demek çok zor.
hocam onu çözdüm. Şimdi şöyle bir sıkıntı var, ben TFDQuery' i refresh ediyordum her insertion ya da delete işleminden sonra ama bu tüm tabloyu re-fetch ettiğinden oralarda da hayvan gibi yavaşlıyor.
Bu devexpress abimizin Grid Mode True' sunda bu insertion ve deletion işlemlerini GridTable' a nasıl yansıtabilirim ?
Edit: Soru içinde soru gibi oldu ama :/
Nasıl çözdüğünü yazsaydın keşke başka birinin ihtiyacı olup yararlanabilir.
insert i ve delete i gridin bağlı bulunduğu dataset ile yapmıyormusun farklı bir dataset ile mi yapıyorsun bir de her defasında o 505 bin datayı çekme ihtiyacı gerçekten gerekiyormu kbmmemtable bileşini ni bir incele bu tür yoğun işlemlerde kullanıldığını duymuştum -
masteryoda bunu yazdıozgunlu bunu yazdımasteryoda bunu yazdı
Bir örnek olsa daha rahat anlaşılırdı. böyle şu demek çok zor.
hocam onu çözdüm. Şimdi şöyle bir sıkıntı var, ben TFDQuery' i refresh ediyordum her insertion ya da delete işleminden sonra ama bu tüm tabloyu re-fetch ettiğinden oralarda da hayvan gibi yavaşlıyor.
Bu devexpress abimizin Grid Mode True' sunda bu insertion ve deletion işlemlerini GridTable' a nasıl yansıtabilirim ?
Edit: Soru içinde soru gibi oldu ama :/
Nasıl çözdüğünü yazsaydın keşke başka birinin ihtiyacı olup yararlanabilir.
insert i ve delete i gridin bağlı bulunduğu dataset ile yapmıyormusun farklı bir dataset ile mi yapıyorsun bir de her defasında o 505 bin datayı çekme ihtiyacı gerçekten gerekiyormu kbmmemtable bileşini ni bir incele bu tür yoğun işlemlerde kullanıldığını duymuştumHocam sorunun cevabı spesifik olduğu için yazmadım.
Ama devexpress de large scale için Grid Mode' u TRUE yapıyoruz ve parça parça çekiyor, eğer false ise tamamını çekiyor.
Delete işlemini de DeleteFocused ile yaptım ama insert' in kodunu nasıl kuracağımı bilemedim, ulaştığım link : https://www.devexpress.com/Support/Center/Question/Details/A291
Burada smartrefresh' i true yapın demiş ama herhangi bir çözüm sunmuyor (bana sunmadı).
-
kendim 505 bin datalık bir örnek hazırlayıp deneyeceğim inş.
-
masteryoda bunu yazdı
kendim 505 bin datalık bir örnek hazırlayıp deneyeceğim inş.
hocam local de değil yalnız remote bağlanıyoruz, yarın müsait olursan öğleden sonra teamden gösterebilirim
-
hocam o zaman çok normal karşılarım bunun grid le pek alakası olmaz sen o datayı locale bir çek dene ki o kadar datayı çekmenin mantığını hala anlayamadım örnek bir ilde yaşayan kişiler olsun o kadar datayı çekip üzerinde edit insert yaparken neden 505 bin kaydın 505 binine de ihtiyaç olsun.
-
Firebird ibexpert ile 500.000 data generate etim 35 alan var tabloda basitçe bir cari tablosu tüm datayı cxgride çekmesi 8 sn sürdü bence çok normal ve kabul edilebilir. grid modu formun create inde cxGrid1DBTableView1.DataController.DataModeController.GridMode:=True; yaptım ama filtrelemeyi kullanmak içinde https://www.devexpress.com/Support/Center/Question/Details/A133
bu sayfadaki https://www.devexpress.com/Support/Center/Question/Details/A133 Data Controller's Filter.AutoDataSetFilter property value to True yaptım insert delete update işlemleri sn sürmedi tabloda örnek firmaid alanı var integer tanımlı cxgrid filtrede 1268052942 aratım yine sn sürmedi.
Bence datanı önce bir locale çek orada test et -
masteryoda bunu yazdı
Firebird ibexpert ile 500.000 data generate etim 35 alan var tabloda basitçe bir cari tablosu tüm datayı cxgride çekmesi 8 sn sürdü bence çok normal ve kabul edilebilir. grid modu formun create inde cxGrid1DBTableView1.DataController.DataModeController.GridMode:=True; yaptım ama filtrelemeyi kullanmak içinde https://www.devexpress.com/Support/Center/Question/Details/A133
bu sayfadaki https://www.devexpress.com/Support/Center/Question/Details/A133 Data Controller's Filter.AutoDataSetFilter property value to True yaptım insert delete update işlemleri sn sürmedi tabloda örnek firmaid alanı var integer tanımlı cxgrid filtrede 1268052942 aratım yine sn sürmedi.
Bence datanı önce bir locale çek orada test ethocam birçok kişi aynı makinaya bağlanacak, local çalışması söz konusu olamıyor ne yazık ki. Insert işlemi hızlı oluyor fakat onu tabloda göstermek için Refresh yapıyorum, o da 1 datayı alacağı yerde hepsini çekiyor. O zaman da yavaş oluyor haliyle, yoksa gözlemlediğim kadarıyla db deki insert, update, delete işlemleri 1 saniyenin altında. Benim sorunum tabloyu güncelleme de
--------
Burdaki Refresh metodunu kullanıyorum : http://docwiki.appmethod.com/appmethod/1.16/libraries/en/FireDAC.Comp.Client.TFDQuery_Methods
ve diyoki hepsini re-fetch eder.
Refresh public Re-fetches data from the database to update a dataset's view of data. Devexpress de RefreshExternal diye bir metod var, onu yapınca da aynısını yapıyor ama ben sadece ilgili kısmı tabloya yansıtmak istiyorum.
ozgunlu tarafından 25/Mar/16 09:15 tarihinde düzenlenmiştir -
peki gerçekten o tüm tabloyu çekmenin maksadı nedir en son yüz kayıt çekilse yada beli bir filtre sadece bugünkü kayıtlar gibi çekilse ne olacak 550 bin data ne bir ekrana sığar nede bir insan baktığında hepsini görebilir normal dbgrid kullandığında da aynı sorun varmı veya ehlib inde bir gridi var bunda da test etinmi 550 bin data sürekli göstermek için pek mantıklı gelmiyor.
-
Çözüm :
Firedac, devexpress data büyüdükçe ağırlaşmaya başlıyor. Temel sebebi, devexpress önce tüm datayı ram' e yüklüyor ardından burdan servis ediyor ve herhangi bir update işleminde listener' lara sadece update bilgisi geliyor. Hangi datanın update olduğunu bilmediği için tüm datayı tekrar çekiyor.
Bu sıkıntıyı gidermek için, 2 opsiyon var. Birincisi grid mode' u TRUE yapmak diğeri ise smartrefresh parametresini TRUE yapmak. Smartrefresh bende çalışmadı.
https://www.devexpress.com/Support/Center/Question/Details/A291
Grid Mode' u TRUE yaptığınızda sorting, grouping, summary calculation ve filtering işlevini yitiriyor. Bunlar için : https://www.devexpress.com/Support/Center/Question/Details/A133
Yukardaki linkte çözümler yardımcı oluyor.
Sorting için , https://www.devexpress.com/Support/Center/Question/Details/A741 bu linkteki kod parçasını onSortingChanged event' ine yazıyoruz ama bu ADO ile yazılmış. Firedac için kodu bir parça convert etmeniz lazım.
Buradan @masteryoda ve @WH0 ' ya ve tabiki @HolyOne' a sevgilerimi iletiyorum :D
ozgunlu tarafından 30/Mar/16 09:30 tarihinde düzenlenmiştir