AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Memory Leaks bei Verwendung von System.JSON

Ein Thema von TheSledgeHammer · begonnen am 12. Feb 2020 · letzter Beitrag vom 4. Jun 2020
Antwort Antwort
Seite 2 von 2     12
Der schöne Günther

Registriert seit: 6. Mär 2013
5.872 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: Memory Leaks bei Verwendung von System.JSON

  Alt 4. Jun 2020, 09:05
Was erwartest du?

Du lässt dir mittels JsonValue := TJSonObject.ParseJSONValue(JsonString); etwas erstellen und gibst es nie wieder frei.

Du musst das auch schon wieder freigeben.
Delphi-Quellcode:
  // create TJSonObject from string
  JsonValue := TJSonObject.ParseJSONValue(JsonString);
  if Assigned(JSonValue) then
     try

        // get the array
        JsonArray := JsonValue.GetValue<TJSONArray>('phones');

        // iterate the array
        for ArrayElement in JsonArray do begin
           if ArrayElement.GetValue<String>('name') = User then
           begin
            Result := ArrayElement.GetValue<boolean>(Field);
            break;
           end;
        end;
     finally
        JSonValue.Destroy();
     end;
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.111 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

AW: Memory Leaks bei Verwendung von System.JSON

  Alt 4. Jun 2020, 09:54
Noch besser "JSonValue.Free();" statt "JSonValue.Destroy();"
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.872 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Memory Leaks bei Verwendung von System.JSON

  Alt 4. Jun 2020, 10:08
Nein, warum? Es ist doch völlig klar dass die Variable nicht nil ist, also kann man sich die nochmalige Überprüfung auch sparen.
  Mit Zitat antworten Zitat
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
45 Beiträge
 
Delphi 10.3 Rio
 
#14

AW: Memory Leaks bei Verwendung von System.JSON

  Alt 4. Jun 2020, 10:37
allein das Json Objekt Freizugeben bringt nichts.
Hab ich auch schon versucht.

Delphi macht da intern so viele Unterobjekte (je nach Datenstruktur) und gibt die Teile aber nicht geregelt wieder frei wenn ich die JsonValue Variable freigebe.
JsonValue.free hatte ich drin, die Leaks waren dennoch da.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.180 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Memory Leaks bei Verwendung von System.JSON

  Alt 4. Jun 2020, 10:38
Das macht man nicht, weil

weil

na weil in de Hilfe steht, dass man Destroy nicht direkt aufruft, deswegen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
45 Beiträge
 
Delphi 10.3 Rio
 
#16

AW: Memory Leaks bei Verwendung von System.JSON

  Alt 4. Jun 2020, 10:42
ich hatte es mit .free drin.
FastMM hat aber dennoch ordentlich Leaks rausgeschrieben.

Ich teste nochmal
und ja, die destroy Methode rufe ich normal nicht direkt auf.
Normal FreeAndNil


Update:

jetzt habe ich es mit FreeAndNil freigegeben und jetzt scheint er gerade keinen Speicher mehr zu verschwenden.
Komisch ist, dass ich es vorher genau so hatte ...

Geändert von BastiFantasti ( 4. Jun 2020 um 10:45 Uhr)
  Mit Zitat antworten Zitat
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
45 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: Memory Leaks bei Verwendung von System.JSON

  Alt 4. Jun 2020, 10:48
was genau besagt dieses FOwned Eigenschaft?

Vor dem Aufruf

Code:
  JsonValue := TJSonObject.ParseJSONValue(JsonString);
ist die JsonValue Variable nicht nil sonder schon vorhanden mit der Eigenschaft FOwned = False

im nächsten Schritt ist das Objekt an sich unverändert, jedoch steht FOwned = True drin...
  Mit Zitat antworten Zitat
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
45 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: Memory Leaks bei Verwendung von System.JSON

  Alt 4. Jun 2020, 10:55
Also ich nehme alles zurück und behaupte das Gegenteil

Mit dem FreeAndNil scheint es jetzt gerade zu funktionieren.
Evtl. hatte ich es vorher nicht komplett neu kompiliert oder wie auch immer.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf