Json Oluşturulan Objeyi Yok Etmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kirve
Üye
Mesajlar: 64
Kayıt: 03 Nis 2008 12:40

Json Oluşturulan Objeyi Yok Etmek

Mesaj gönderen kirve »

Arkadaslar merhaba
Tpersonel ismindeki sınıfı create edip cıktıyı json formatında alıyorum.
fakat cıktıyı aldıktn sonra oluşturulan sınıfı yok etmeme rağmen görev yöneticisinden takip etmeme rağmen kullanılan ram miktarında düşme olmuyor. sürekli yükselme eğiliminde

Örnek Kod

Kod: Tümünü seç

var

  aRttiCntx: TRttiContext;
  afield: TRttiField;
  ajsonObject: TJSONObject;
begin
  ajsonObject := TJSONObject.Create;
  aRttiCntx := TRttiContext.Create;
  try
      for afield in aRttiCntx.GetType(Self.ClassType).GetFields do
      begin
        if afield.Visibility in [mvPublic] then
          ajsonObject.AddPair(TJsonPair.Create(afield.Name,
            afield.GetValue(Self).ToString));
      end;
    aRttiCntx.Free;
    Result := ajsonObject;
  finally
   // ajsonObject.Free;
   // aRttiCntx.Free;

  end;
Oluşturulan Ajsonobject free ettiğimdede kodu calıştırdığımda nesneye ulaşılamadı hatasını vermekte.
bunu işim bittikten sonra ramdan nasıl atabilirim.
teşekkürler.
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Json Oluşturulan Objeyi Yok Etmek

Mesaj gönderen unicorn64 »

bu fonksiyonu çağıran yerde fonksiyondan dönen nesne işi bittiğinde free ediliyor mu?

sonuçta 1 adet TJSONObject ve fields sayısınca TJsonPair nesnesi create ediliyor ama bunlar bu fonksiyon içinde free edilmemiş oluyor
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Json Oluşturulan Objeyi Yok Etmek

Mesaj gönderen xxxjedixxx »

Result := ajsonObject; satırından fonksiyonun geri dönüş değerinin "TJSONObject" olduğunu anlıyorum. Bu yüzden bunu fonksiyon içinde free edersen geri dönüş parametrende free olacağı için hata alırsın. Bu yüzden, fonsiyonu çağırdıktan sonra aldığın geri dönüş değerini, işin bittiğinde free etmelisin.

fonsiyonun adı "create_json" olsun

Kod: Tümünü seç

function create_json: TJSONObject;
var
  aRttiCntx: TRttiContext;
  afield: TRttiField;
 // ajsonObject: TJSONObject; buna gerek yok
begin
  Result := TJSONObject.Create; // direkt bu şekilde yapabilirsin
  aRttiCntx := TRttiContext.Create;
  try
      for afield in aRttiCntx.GetType(Self.ClassType).GetFields do
      begin
        if afield.Visibility in [mvPublic] then
          Result.AddPair(TJsonPair.Create(afield.Name, afield.GetValue(Self).ToString));
      end;
    aRttiCntx.Free;
//    Result := ajsonObject; // artık gerek yok
  finally
   // ajsonObject.Free;
   // aRttiCntx.Free;
  end;
fonksiyonu çağırdığın yerde ise

Kod: Tümünü seç

var obj_json:  TJSONObject;
begin
  obj_json := create_json;
  ...
  ...
  obj_json.free;
end;
kirve
Üye
Mesajlar: 64
Kayıt: 03 Nis 2008 12:40

Re: Json Oluşturulan Objeyi Yok Etmek

Mesaj gönderen kirve »

Tesekküler.
Cevapla