![]() |
AW: Memory Leaks bei Verwendung von System.JSON
Was erwartest du?
Du lässt dir mittels
Delphi-Quellcode:
etwas erstellen und gibst es nie wieder frei.
JsonValue := TJSonObject.ParseJSONValue(JsonString);
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; |
AW: Memory Leaks bei Verwendung von System.JSON
Noch besser "JSonValue.Free();" statt "JSonValue.Destroy();"
|
AW: Memory Leaks bei Verwendung von System.JSON
Nein, warum? Es ist doch völlig klar dass die Variable nicht
Delphi-Quellcode:
ist, also kann man sich die nochmalige Überprüfung auch sparen.
nil
|
AW: Memory Leaks bei Verwendung von System.JSON
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. |
AW: Memory Leaks bei Verwendung von System.JSON
Das macht man nicht, weil
weil na weil in de Hilfe steht, dass man Destroy nicht direkt aufruft, deswegen. |
AW: Memory Leaks bei Verwendung von System.JSON
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 ... |
AW: Memory Leaks bei Verwendung von System.JSON
was genau besagt dieses FOwned Eigenschaft?
Vor dem Aufruf
Code:
ist die JsonValue Variable nicht nil sonder schon vorhanden mit der Eigenschaft FOwned = False
JsonValue := TJSonObject.ParseJSONValue(JsonString);
im nächsten Schritt ist das Objekt an sich unverändert, jedoch steht FOwned = True drin... |
AW: Memory Leaks bei Verwendung von System.JSON
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz