Nesne silinmesi neden bu kadar süre alıyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ibr_ozdemir
Üye
Mesajlar: 25
Kayıt: 27 Nis 2005 02:09

Nesne silinmesi neden bu kadar süre alıyor

Mesaj gönderen ibr_ozdemir »

iyi çalışmalar

Kod: Tümünü seç

TAtaDal = class(TPersistent)
private
  FKok: TAtaDal;
  FDallar: TList;
  FOlGezinti: TOlGezinti;
  FOlDal: TOlDal;
  function DalSil(Dal: TAtaDal): boolean;
  function DalEkle(Dal: TAtaDal): boolean;

  function GetDal(Fih: integer): TAtaDal;
  procedure SetKok(const Value: TAtaDal);
  function GetFihrist: integer;
  procedure SetFihrist(const Value: integer);
  function GetDalSayisi: integer;
  function GetDalSayTum: integer;
  function GetAgac: TAtaDal;
  function GetGobek: integer;
  function Gez(BasDal: TAtaDal; AltDallar: boolean): boolean;
protected
  procedure Gezin(AltDallar: boolean); virtual;
  function Ekle: TAtaDal; virtual;
  function Bul(Dal: TAtaDal; AltDallar: boolean): Boolean; virtual;
  function Kokmu(Dal: TAtaDal): boolean; virtual;
  property DalSayTum: integer read GetDalSayTum;
  property Agac: TAtaDal read GetAgac;
  property Gobek: integer read GetGobek;
  property OlGezinti: TOlGezinti read FOlGezinti write FOlGezinti;
public
  constructor Create(BKok: TAtaDal); virtual;
  destructor Destroy; override;
  procedure Temizle;

  property Dallar[Fihrist: integer]: TAtaDal read GetDal;

  property DalSayisi: integer read GetDalSayisi;

  property Kok: TAtaDal read FKok write SetKok;
  property Fihrist: integer read GetFihrist write SetFihrist;

  property OlDal: TOlDal read FOlDal write FOlDal;
end;

destructor TAtaDal.Destroy;
begin
  if FKok <> nil then
    FKok.DalSil(Self);
  Temizle;
  FDallar.Free;
  inherited Destroy;
end;

procedure TAtaDal.Temizle;
begin
  while FDallar.Count > 0 do
    TAtaDal(FDallar.Last).Free;
end;

function TAtaDal.DalSil(Dal: TAtaDal): boolean;
begin
  Result := true;
  if Assigned(FOlDal) then
    FOlDal(Dal, isSil, Result);
  if Result then
    FDallar.Remove(Dal);
end;
kolay gelsin

Kodları Code tagı icine alırsanız daha duzenli gorunur-gkimirti
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Kod: Tümünü seç

procedure TAtaDal.Temizle;
begin
  while FDallar.Count > 0 do
    TAtaDal(FDallar.Last).Free;
end; 
Şu döngü dikkatimi çekti Neden FDallar Nesnesinin delete procedurundan yararlanmıyorsun? sanki burası işi uzatıyor gibi.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Merhaba,

TList sınıfının Delete metodu sadece listeden atıyor ama hafızada herhangi bir boşaltma yapmıyor, bunun olması için arkadaşın yaptığı gibi her objenin destructor metodunun çağırılması lazım.

Ayrıca kaç nesne oluşturuyor? Ve çok uzundan kasttetiğin ne kadar süre?
ibr_ozdemir
Üye
Mesajlar: 25
Kayıt: 27 Nis 2005 02:09

Mesaj gönderen ibr_ozdemir »

teşekkürler husonet

TList nesnesinin delete yordamını kullansamda parametre olarak yine objenin index ini isteyecek ve obje indexinide yine aratarak alacak

ayrıca ben mesajı yollarken birkaç cümle bişeler eklemiştim aksaklık çıkmış silinmiş galiba(veya benmi göremiyorum ne :( ) herneyse şunlarıda yazmıştım :
"
iyi çalışmalar

TCollection-TCollectionItem benzeri bir nesne yaptım (TDal). Benimkinin farkı içiçe ağaç şeklinde yerleşebiliyorlar. Fakat rem den silerken (Free) TCollectionItem dan çok daha yavaş siliniyor
ör: 1500000 adet TCollectionItem 5 saniyede siliniyor
1500000 adet TDal belki beklesem 30 dakikada silinecek
aşağıdaki kodda ilgili bölümleri görebilirsiniz yardımcı olursanız sevinirim

kolay gelsin
"

bu arada TCollectionItem ında destroy yordamında aynı şekilde silinmiş nesneler:

while FItems.Count > 0 do
TCollectionItem(FItems.Last).Free;

fakat benimki aşırı yavaş siliyor bir türlü anlayamadım
bir de aynı işlemi yani "1500000 adet nesne oluşturup silme" olayını TMenuItem içinde denedim oda benimki gibi yavaş boşalttı remi
yoksa içiçe geçmeli nesnelerin kaderimi bu acaba
yardımcı olursanız çok memnun olucam
iyi günler
iyi çalışmalar
kolay gelsin
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Merhaba.

Kod: Tümünü seç

  while FDallar.Count > 0 do 
    TAtaDal(FDallar.Last).Free; 
Buraya break point koyup baktığınızda "Count" kaç görünüyor uzun sürdüğünüzü söylediğiniz işlemde?

hangi yordamla free ederseniz edin bunu pek etkilememesi gerekiyor ama...
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

mesajı editlerken bir kısmı yanlıslıkla silinmis :oops:
arkadas sanırım 1500000 nesne olusturup siliyorum demisti.
TCollectionItem sınıfında bu islem 5 saniye falan surerken
bu sınıf icin bıraksam belki 30 dakika surecek
demisti....
ÜŞENME,ERTELEME,VAZGEÇME
ibr_ozdemir
Üye
Mesajlar: 25
Kayıt: 27 Nis 2005 02:09

Mesaj gönderen ibr_ozdemir »

ilgin için saol bLue aLonE
delphi 6 ile çalışıyorum ide ile adım adım ilerleyerek kodu takip ediyorum fakat bir aksaklık gözükmüyor yani birer birer 0 a kadar azalıyor, siliniyor
ayrıca yukarda yazdığım noktayı tekrar hatırlatmak isterim
"
aynı işlemi yani "1500000 adet nesne oluşturup silme" olayını TMenuItem içinde denedim oda benimki gibi yavaş boşalttı rem i
yoksa içiçe geçmeli nesnelerin kaderimi bu acaba

"
teşekkürler
ibr_ozdemir
Üye
Mesajlar: 25
Kayıt: 27 Nis 2005 02:09

Mesaj gönderen ibr_ozdemir »

arkadaşlar isteyene (ilgilenene) bu birimin tamamını yollayabilirim
tekrar teşekkür
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

İlgi çekici bir konu ben bir bakayım mail adresime zip leyip atarsan sevinirim.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
ibr_ozdemir
Üye
Mesajlar: 25
Kayıt: 27 Nis 2005 02:09

Mesaj gönderen ibr_ozdemir »

mail göndermede bazen sıkıntı yaşıyorum yolladığım mailler ulaşamayabiliyor :?
yaklaşık 10 dakika önce sözünü ettiğimiz dosyayı yolladım size ulaştığında lütfen haberdar edin
Cevapla