Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Thread.FFatalException (TJSON)
#1
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.

   
WWW
Cevapla
#2
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.
Cevapla
#3
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;
WWW
Cevapla
#4
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.
Cevapla
#5
(04-03-2019, Saat: 09:55)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: 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
WWW
Cevapla
#6
(04-03-2019, Saat: 10:39)yhackup Adlı Kullanıcıdan Alıntı:
(04-03-2019, Saat: 09:55)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: 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.
Cevapla
#7
   

Delphi 10.2 UP3 sürümü
WWW
Cevapla
#8
(04-03-2019, Saat: 11:14)yhackup Adlı Kullanıcıdan Alıntı: 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.
Cevapla
#9
(04-03-2019, Saat: 11:03)Fesih ARSLAN Adlı Kullanıcıdan Alıntı:
(04-03-2019, Saat: 10:39)yhackup Adlı Kullanıcıdan Alıntı: 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.

REST request memory leak when no charset is returned in header bu sorundan mı bahsediyorsun @"Fesih ARSLAN"  hocam. Bu sorun'un 10.2 Release 1 ile düzeldiğini söylüyorlardı ama  Rolleyes
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Thread içinde CoInitialize(nil) ve CoUninitialize serdar 6 1.021 22-08-2023, Saat: 09:50
Son Yorum: yhackup
  Thread Socket (Yardım) hkeskin 1 1.360 11-07-2023, Saat: 12:47
Son Yorum: delphiman
  REST.Json, TJSon.JsonToObject sorunsalı Gürcan 15 10.331 08-12-2022, Saat: 17:01
Son Yorum: 3ddark
  Thread pool mantığı nasıl kurulmalı ? mrmarman 12 3.106 16-12-2021, Saat: 20:45
Son Yorum: Tuğrul HELVACI
Question Bu thread kullanımı doğrumu ? seci20 0 657 05-09-2021, Saat: 12:55
Son Yorum: seci20



Konuyu Okuyanlar: 1 Ziyaretçi