Datadan Veri Çekmede Hız Problemi

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
beklentili
Üye
Mesajlar: 86
Kayıt: 21 Ara 2013 09:05
İletişim:

Datadan Veri Çekmede Hız Problemi

Mesaj gönderen beklentili »

Merhaba, geliştirdiğim uygulamada internet üzerinde bulunan sunucudaki MySql veritabanına bağlanarak veriler çekiyorum.
Veritabanına bağlantıyı Unidac bileşen paketinde bulunan UniConnection nesnesi ile yapıyorum.

Veritabanı bağlantısında UniTransaction, UniQuery ve MySQLUniProvider bileşenlerini de kullanıyorum.

Daha sonra

Kod: Tümünü seç

procedure TProgressThread.Data_Sorgulama_Pro;
begin
DataModule2.UniQuery1.Close;
DataModule2.UniQuery1.SQL.Clear;
DataModule2.UniQuery1.SQL.Text := 'Select * from kataloglar';
DataModule2.UniQuery1.Open;

DataModule2.UniQuery1.First;
While not (DataModule2.UniQuery1.Eof) do
begin

Synchronize(Yeni_Katalog_Sablon_Pro); //Thread yöntemi ile işlemleri başlatmak

 DataModule2.UniQuery1.Next;
end;

DataModule2.UniQuery1.Close;

end;
Bu komutlar ile tek tek ilgili kayıtları işliyorum.

Aslında bağlantı, verileri çekmek ve işlemek hususunda herhangi bir problem yaşamıyorum. Ancak hızlı bir internet bağlantısında dahi UniConnection nesnesini aktif ederken 11 saniye ve 10 adet kaydı veritabanından çekerken 20 saniye gibi bir süre beklemek gerekiyor. Eğer internet hızı düşükse bu işlemleri yapmak tam bir çile oluyor. Yapılan işlemleri Thread yöntemi ile yaptığım için AniIndicator nesnesi devreye giriyor ama dediğim gibi bağlantı hızı yavaşsa bu nesne dön dön. . . . durmak bilmiyor.

Sizlerden isteğim bu işlemleri yapabileceğim başka bir yöntem var mı veya bu yapıda nasıl bir değişiklik yaparak işlemleri hızlandıra bilirim. Saygılarımla
[/size]http://www.componentler.com | Türkçe component sitesi
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Datadan Veri Çekmede Hız Problemi

Mesaj gönderen thelvaci »

Öncelikle belirtmek isterim ki; eğer bir thread kullanacaksanız ve o thread içinde bir veritabanı bağlantısı kullanacaksanız; bu bağlantı thread'e has bir bağlantı olmalıdır. Yani sadece o thread içinde kullanılacak yeni bir connection oluşturmalısınız. İkinci olarak; Synchronize çağrımını yaptığınızda; ilgili kod main thread üzerinde çalıştırılır. Yeni_Katalog_Sablon_Pro metodunun içinde ne yapıyorsunuz onu da paylaşırsanız daha isabetli yanıtlar alabilirsiniz sanırım.
beklentili
Üye
Mesajlar: 86
Kayıt: 21 Ara 2013 09:05
İletişim:

Re: Datadan Veri Çekmede Hız Problemi

Mesaj gönderen beklentili »

Yeni_Katalog_Sablon_Pro komutları aşağıda hocam.

Kod: Tümünü seç


procedure TProgressThread.Yeni_Katalog_Sablon_Pro;
begin
nesne_sayisi:=nesne_sayisi+1;

 Yeni_ListBox:= TListBoxItem.Create(Form_Kategoriler.ListBox1);
 Yeni_ListBox.Name:='mklitam'+nesne_sayisi.ToString;
 Yeni_ListBox.Text:='';
 Yeni_ListBox.Height:=50;
 Yeni_ListBox.StyleLookup:='listboxitemdetaillabel';
 Yeni_ListBox.Parent:=Form_Kategoriler.ListBox1;

 Yeni_Katalog_Sablon := TLayout.Create(Form_Kategoriler);
 Yeni_Katalog_Sablon.Align:=TAlignLayout.Client;
 Yeni_Katalog_Sablon.Margins.Bottom:=3;
 Yeni_Katalog_Sablon.Margins.Left:=10;
 Yeni_Katalog_Sablon.Margins.Right:=10;
 Yeni_Katalog_Sablon.Margins.Top:=3;
 Yeni_Katalog_Sablon.Name:='Yeni_Katalog_Sablon'+nesne_sayisi.ToString();
 Yeni_Katalog_Sablon.Parent:= Yeni_ListBox;

 Synchronize(Yeni_Katalog_Arka_Plan_Pro);

end;


Hocam ayrıca sizin "thread kullanacaksanız ve o thread içinde bir veritabanı bağlantısı kullanacaksanız" sözünüzden ben şunu anladım. Thread içerisinde data bağlantısı için TUniConnection sınıfından ve diğer gerekli sınıflardan nesne oluştur ve data bağlantısını bu şekilde yap. Bu mantık doğru mudur ve performansa olumlu etkisi olur mu?
[/size]http://www.componentler.com | Türkçe component sitesi
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Datadan Veri Çekmede Hız Problemi

Mesaj gönderen thelvaci »

Performansa değil belki ama düzgün çalışmaya kesinlikle etkisi olur. Sitemde istifade edebileceğinizi umduğum bir kaç makale var thread ve senkronizasyonları ile alakalı. Sizin performans sorununuzun ise; Android programlamaya pek aşina olmamakla birlikte TListBox nesnesinden kaynaklandığını düşünüyorum. Bunun yerine TListView kullanırsanız performansınızın artacağına inanıyorum.

Ayrıca; eğer Yeni_Katalog_Sablon_Pro metodunuzu Thread içinde Syncronize ile sarmalamadığınız bir başka çağrım yok ise, yani tek başına çağırmıyorsanız bu durumda; Yeni_Katalog_Arka_Plan_Pro metodunuzu Synchronize ile sarmalamanıza gerek yok, çünkü örneğinizden gördüğüm kadarı ile Yeni_Katalog_Sablon_Pro metodunuzu Synchronize ile sarmalayıp çağırıyorsunuz-ki bu da ilgili metodun ana thread içinde çağrılacağı anlamına gelir-, bu durumda Yeni_Katalog_Arka_Plan_Pro metodunuzu da normal bir şekilde çağırabilirsiniz.

Tabii bahsettiğim tüm bu hususlar, thread ve senkronizasyonu ile alakalı hususlar. Sizin performans probleminizin ana nedeni değildir. Dediğim gibi TListBox yerine TListView kullanarak bir deneme yapabilirsiniz. Umarım bu performansınıza olumlu katkı sağlayacaktır.
beklentili
Üye
Mesajlar: 86
Kayıt: 21 Ara 2013 09:05
İletişim:

Re: Datadan Veri Çekmede Hız Problemi

Mesaj gönderen beklentili »

İlginize çok teşekkür ediyorum hocam, söylediklerinizi uygulamaya çalışacağım.
[/size]http://www.componentler.com | Türkçe component sitesi
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Datadan Veri Çekmede Hız Problemi

Mesaj gönderen SimaWB »

Sn. thelvaci'nin dediği gibi TListView kullanmak kesinlikle performans açısından daha iyidir.
Ayrıca ListBox da kullansanız, ListView de kullansanız listeye ardı sıra bir çok eleman ekleme işlemlerini Items.BeginUpdate - Items.EndUpdate arasında yapmanız çok ciddi performans kazandırır.
There's no place like 127.0.0.1
Kullanıcı avatarı
clayhuseyin
Üye
Mesajlar: 5
Kayıt: 24 Kas 2010 02:44

Re: Datadan Veri Çekmede Hız Problemi

Mesaj gönderen clayhuseyin »

Merhaba Arkadaşlar;
Ben öncelikle yine söyleyim direk databese bağlanmakla çok uğraştım ve profesyonel çözümlerde arada hep bir katman daha gördüm. Sonuç olarak DataSnap Kullanarak bu içi 1-3 sn içierisinde json olarak hallediyorum ve Servis Takip programında 2 yılı aşkın süredir kullanıyorum. Tavsiyem DataSnap Kullanmanız hem uzak hem local olarak database Oracle SQL Mysql Vs ne olursa olsun sorun. :)
Dosya ekleri
MSSQL ve DataSnap
MSSQL ve DataSnap
DataSnapServer.png (7.6 KiB) 3732 kere görüntülendi
Kullanıcı avatarı
cengaver
Üye
Mesajlar: 111
Kayıt: 01 Nis 2014 05:02
Konum: İstanbul

Re: Datadan Veri Çekmede Hız Problemi

Mesaj gönderen cengaver »

Merhaba,
... DataModule2.UniQuery1.SQL.Text := 'Select * from kataloglar'; ...
şeklinde bir SQL cümlesi var. Bu SQL cümlesi toplamda kaç satır veri çekiyor? Boş tablo ile dolu tablo arasındaki hız farkını ölçtünüz mü?
Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 523
Kayıt: 05 May 2005 03:24
Konum: DelphiTürkiye.COM

Re: Datadan Veri Çekmede Hız Problemi

Mesaj gönderen hi_selamlar »

clayhuseyin yazdı:Merhaba Arkadaşlar;
Ben öncelikle yine söyleyim direk databese bağlanmakla çok uğraştım ve profesyonel çözümlerde arada hep bir katman daha gördüm. Sonuç olarak DataSnap Kullanarak bu içi 1-3 sn içierisinde json olarak hallediyorum ve Servis Takip programında 2 yılı aşkın süredir kullanıyorum. Tavsiyem DataSnap Kullanmanız hem uzak hem local olarak database Oracle SQL Mysql Vs ne olursa olsun sorun. :)

Merhaba,

Konu biraz eski ama benim için çok yeni.. :bravo:

Lütfen bu işlemi nasıl yapıcağımızı bizede anlatırmısınız.
Bir video olur, örnek bir uygulama olur.

Benim amacım MySQL ile DataSnap Android için veri çekmek ve işlemek.

Bir çok video izledim ama ııı ııı olmadı. Kafa almıyor artık. :N(

Aslında bir seminer olsa şu Anroid için nede güzel olurdur. :bravo:

Teşekkürler.
Herkes cahildir, bazi konularda.
Cevapla