Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
StringList en hızlı aktarım Veritabanı
#1
değerli arkadaşlar aşağıdaki döngü haricinde stringliste daha hızlı ekleme şansı varmı?

MyFiles := TStringList.create();
try
Dm_Foto.FD_FotoView.First             ;
 while not Dm_Foto.FD_FotoView.eof do
 begin
 myfiles.Add(Dm_Foto.FD_FotoView.FieldByName('FULLYOL').AsString);
 Dm_Foto.FD_FotoView.Next;
 end;
finally
 MyFiles.Free;
end;

vt :firebird
Cevapla
#2
Eğer dataset'ten tek tek çekeceksen While döngüsünü FD_FotoView.DISABLECONTROLS ve FD_FotoView.ENABLECONTROLS arasına alabilirsin.

Daha pratiği ise listeyi veritabanından virgül ile ayrışmış ve tek satırda çekebilirsin. Bunun için Firebird'de SELECT ile LIST komutunu kullanabilirsin. Delphi tarafında ise MyFiles.DelimitedText property'sine gelen veriyi doğrudan alabilirsin. ( Delimiter parametresini virgül yapmayı unutmayın )

YouTube Delphi Tips

"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" P.Safa
WWW
Cevapla
#3
(12-06-2020, Saat: 11:04)uparlayan Adlı Kullanıcıdan Alıntı: Eğer dataset'ten tek tek çekeceksen While döngüsünü FD_FotoView.DISABLECONTROLS ve FD_FotoView.ENABLECONTROLS arasına alabilirsin.

Daha pratiği ise listeyi veritabanından virgül ile ayrışmış ve tek satırda çekebilirsin. Bunun için Firebird'de SELECT ile LIST komutunu kullanabilirsin. Delphi tarafında ise MyFiles.DelimitedText property'sine gelen veriyi doğrudan alabilirsin. ( Delimiter parametresini virgül yapmayı unutmayın )

kayıt sayısı 9000 olan var SELECT ile LIST komutunu deniyecem anında sonuç verirmi acaba?
Cevapla
#4
https://github.com/PacktPublishing/Delph...rformance/ burda örnekleri var, control f ile string list şeklinde aratın, 
hangi yöntemin ne kadar performanslı olduğunu bulabilirsiniz.
daha detaylı bilgiler bu kitapta, herkese tavsiye ederim. çok faydalı bir kitap.
https://books.google.com.tr/books/about/...edir_esc=y

4y7yd9.png

Hc0zPa.png
Cevapla
#5
Mevcut kayıtlar ile ne kadar süre aldığını merak ettim, bu soruyu sorduracak kadar yavaş ise sorunu veritabanı tarafından çözebilirsiniz.

Ekranda GRID var ve veritabanı buraya veri basıyorsa akışta ekranda bunu göstermek için kayıt başına bir PAINT süresi alacaktır. Bence sizin sorun burada.

@uparlayan 'ın WHILE EOF'dan hemen önce  DISABLECONTROLS ve END'den sonra da  ENABLECONTROLS şeklinde arasına alma fikrini mutlaka değerlendirin. Başka bir şeye ihtiyacınız kalmayacaktır.

NOT : Bir de aktif Grid'e bağlı FDQuery kullanmaktansa sadece bu işler için ve sadece dilediğiniz sayıda kayıt ve field çeken servis Query nesneniz olsun. Bunu dinamik/anonim olarak da lazım olduğunda CREATE edip try / finally ile oracıkta FREE edebilirsiniz.  Idea


Ekleme: PATH konusunda sürekli yinelenen kayıtları GROUP BY veya DISTINCT ile de sadeleştirip, 9000 kaydı 100-200 taneye de indirebilir performansı tavan yaptırabilirsiniz.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#6
MyFiles := TStringList.create();
    MyFiles.Delimiter:=(',');
   try
   myfiles.Text:=(Dm_Foto.FD_FotoThum.FieldByName('FULLYOL').AsString);
    Form_AnaSayfa.Image.FillFromList( MyFiles);
   finally
     MyFiles.Free;
  
   end;

parametre hatalı diyor neyi yanlış yapıyorum

(12-06-2020, Saat: 12:07)mrmarman Adlı Kullanıcıdan Alıntı: Mevcut kayıtlar ile ne kadar süre aldığını merak ettim, bu soruyu sorduracak kadar yavaş ise sorunu veritabanı tarafından çözebilirsiniz.

Ekranda GRID var ve veritabanı buraya veri basıyorsa akışta ekranda bunu göstermek için kayıt başına bir PAINT süresi alacaktır. Bence sizin sorun burada.

@uparlayan 'ın WHILE EOF'dan hemen önce  DISABLECONTROLS ve END'den sonra da  ENABLECONTROLS şeklinde arasına alma fikrini mutlaka değerlendirin. Başka bir şeye ihtiyacınız kalmayacaktır.

NOT : Bir de aktif Grid'e bağlı FDQuery kullanmaktansa sadece bu işler için ve sadece dilediğiniz sayıda kayıt ve field çeken servis Query nesneniz olsun. Bunu dinamik/anonim olarak da lazım olduğunda CREATE edip try / finally ile oracıkta FREE edebilirsiniz.  Idea


Ekleme: PATH konusunda sürekli yinelenen kayıtları GROUP BY veya DISTINCT ile de sadeleştirip, 9000 kaydı 100-200 taneye de indirebilir performansı tavan yaptırabilirsiniz.

bazen mutluluğa giden yolda kalbim hızlı atmaya başlıyor korkuyorum... haklısınız bende 50 kayıt için denedim..normaldi.. 9000 kayıtta yavaşlar diye düşünmüştüm
Cevapla
#7
SELECT Cümlenizi paylaşırmısınız.

+

myfiles.Text :=(Dm_Foto.FD_FotoThum.FieldByName('FULLYOL').AsString);

değil,

myfiles.DelimitedText := (Dm_Foto.FD_FotoThum.FieldByName('FULLYOL').AsString);

YouTube Delphi Tips

"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" P.Safa
WWW
Cevapla
#8
(12-06-2020, Saat: 12:30)uparlayan Adlı Kullanıcıdan Alıntı: SELECT Cümlenizi paylaşırmısınız.

select ARSIVNO,LIST(FULLYOL) AS FULLYOL from FOTOLAR GROUP BY ARSIVNO ORDER BY ARSIVNO ASC



Form_AnaSayfa.ImageEnMView1.LockUpdate;
    MyFiles := TStringList.create();
    MyFiles.Delimiter:=(',');
   try
   myfiles.DelimitedText:=(Dm_Foto.FD_FotoThum.FieldByName('FULLYOL').AsString);

   Form_AnaSayfa.ImageEnMView1.Clear();
   Form_AnaSayfa.ImageEnMView1.FillFromList( MyFiles,'',true);
   finally
     MyFiles.Free;
     Form_AnaSayfa.ImageEnMView1.unLockUpdate;
   end;

bu şekildede olmadı
Cevapla
#9
Hata mesajı tam olarak nedir, paylaşır mısınız?

YouTube Delphi Tips

"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" P.Safa
WWW
Cevapla
#10
select ARSIVNO,LIST(FULLYOL) AS FULLYOL from FOTOLAR GROUP BY ARSIVNO ORDER BY ARSIVNO ASC

şimdi dikkatimi çekti 
fullyol (path) aslında aradaki boşluklarada virgül atmış LIST ek fonksiyonları mı var acaba

D:\DENEME\0000000005-MRAT,ÖZYURT,KARABACAK\0000000005-GN-0050.JPG,D:\DENEME\0000000005-MRAT,ÖZYURT,KARABACAK\0000000005-GN-0051.JPG,D:\DENEME\0000000005-MRAT,ÖZYURT,KARABACAK\0000000005-GN-0052.JPG


MRAT,ÖZYURT,KARABACAK
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  StringList Yavaşlığı ve Güncelleme Sorunu bnyamin86 2 132 11-11-2020, Saat: 11:27
Son Yorum: ozcanm
  SQLite Veritabanı Güncelleme Frrst 5 284 26-10-2020, Saat: 18:53
Son Yorum: Frrst
  StringList Güncelleme MEDCEZİR 1 152 26-10-2020, Saat: 09:24
Son Yorum: TescilsizUzman
  Veritabanı Dosyasındaki Dataları Listeleme bnyamin86 6 826 17-08-2020, Saat: 18:35
Son Yorum: bnyamin86
  Firebird Veritabanı Oluşturulması MEDCEZİR 4 772 25-07-2020, Saat: 14:17
Son Yorum: ihalilcoban



Konuyu Okuyanlar: 1 Ziyaretçi