Delphi Can
Thread.FFatalException (TJSON) - Baskı Önizleme

+- Delphi Can (http://www.delphican.com)
+-- Forum: Delphi (http://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (http://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: Thread.FFatalException (TJSON) (/showthread.php?tid=3396)



Thread.FFatalException (TJSON) - yhackup - 04-03-2019

Thread içerisinde kullandığım serviste işim biten TJSON nesnesini boşaltmak isteğimde kendimi burada buluyorum sebebi ne olabilir ?


 
var
  errors :TJSONObject;
  items: TJSONArray;
begin         
if Assigned(Body.Values['errors']) then
         begin
            items    := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(Body.GetValue('errors').ToString),0) as TJSONArray;
            errors   := items.Get(0) as TJSONObject;
            raise Exception.Create(errors.GetValue('faultMessage').Value);
         end;
***
bla bla bla


Destroy ve FreeAndNil yaparken kendimi aşağıdaki kod bloğunda buluyorum.

[attachment=512]


Cvp: Thread.FFatalException (TJSON) - Fesih ARSLAN - 04-03-2019

Merhaba,
" TJSON nesnesini boşaltmak isteğimde... " bunu hangi yöntemle (yıkıcı kod bölümünü yazmamışsınız) yapıyorsunuz?
Mantıken oluşturduğunuz bir sınıf veya tipi yok etmeniz daha doğru olacaktır.
Oluşturmadan yok etmeye çalıştığınız bir tip var ise hata üretme ihtimali oldukça fazladır.


Cvp: Thread.FFatalException (TJSON) - yhackup - 04-03-2019

Destroy ve FreeAndNil  işlemlerim bu şekilde, bu objeler create oluyor içerisindeki bilgileri alıyorum sonrasında yok edyorum

     
*
*
*
finally
if Assigned(items) then
        FreeAndNil(items);
      //  items.Destroy;

     if Assigned(errors) then
       FreeAndNil(errors);
     //  errors.Destroy;
end;



Cvp: Thread.FFatalException (TJSON) - Fesih ARSLAN - 04-03-2019

Kullandığınız tüm JSON objelerinin yok olması için yalnızca items'ı yok etmeniz yeterli olacaktır.
if Assigned(items) then
       FreeAndNil(items);
Diğer nesneniz (errors), items'ı referans aldığı için Items'in yok edilmesi durumunda kendisi de yok olacaktır.


Thread.FFatalException (TJSON) - yhackup - 04-03-2019

(04-03-2019, Saat: 09:55)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Kullandığınız tüm JSON objelerinin yok olması için yalnızca items'ı yok etmeniz yeterli olacaktır.
if Assigned(items) then
       FreeAndNil(items);
Diğer nesneniz (errors), items'ı referans aldığı için Items'in yok edilmesi durumunda kendisi de yok olacaktır.

ilk başta öyle idi memoryleak var diye uyardı beni ide


Cvp: Thread.FFatalException (TJSON) - Fesih ARSLAN - 04-03-2019

(04-03-2019, Saat: 10:39)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(04-03-2019, Saat: 09:55)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Kullandığınız tüm JSON objelerinin yok olması için yalnızca items'ı yok etmeniz yeterli olacaktır.
if Assigned(items) then
       FreeAndNil(items);
Diğer nesneniz (errors), items'ı referans aldığı için Items'in yok edilmesi durumunda kendisi de yok olacaktır.

ilk başta öyle idi memoryleak var diye uyardı beni ide

Bug olabilir. Sanırım Seattle sürümünde de vardı. Delphi 10.1 sürümü ile birlikte bu sorun düzeltilmişti diye hatırlıyorum.


Cvp: Thread.FFatalException (TJSON) - yhackup - 04-03-2019

[attachment=513]

Delphi 10.2 UP3 sürümü


Cvp: Thread.FFatalException (TJSON) - Fesih ARSLAN - 04-03-2019

(04-03-2019, Saat: 11:14)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Delphi 10.2 UP3 sürümü

Paylaştığınız resmin sol tarafında bulunan Local Variable penceresinde durum net görünüyor. 
Nil olan objeler var. Onlar serbest bırakılmış. Yok etme metodu uygulanamaz. 
Tahminimce bug devam ediyor.


Cvp: Thread.FFatalException (TJSON) - edo - 04-03-2019

(04-03-2019, Saat: 11:03)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(04-03-2019, Saat: 10:39)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.ilk başta öyle idi memoryleak var diye uyardı beni ide

Bug olabilir. Sanırım Seattle sürümünde de vardı. Delphi 10.1 sürümü ile birlikte bu sorun düzeltilmişti diye hatırlıyorum.

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. bu sorundan mı bahsediyorsun @Fesih ARSLAN  hocam. Bu sorun'un 10.2 Release 1 ile düzeldiğini söylüyorlardı ama  Rolleyes