Einzelnen Beitrag anzeigen

Incocnito

Registriert seit: 28. Nov 2016
210 Beiträge
 
#7

AW: Memory Leak bei TJsonObject

  Alt 23. Dez 2021, 14:28
In der Tat ... entweder musst du vor der neu-Zuweisung das "alte" Objekt freigeben, oder du ziehst das Free aus dem unteren finally weiter nach oben.
Delphi-Quellcode:
procedure TdmCleverReach.RefreshToken;
var LResponse: TJsonObject;
    LResponseStream: TBytesStream;
    FormData: TidMultiPartFormDataStream;
begin

  Formdata := TIdMultiPartFormDataStream.Create;
  Formdata.AddFormField('grant_type', 'refresh_token');
  Formdata.AddFormField('refresh_token', INIRefreshToken);
  Formdata.AddFormField('client_id', INIClientID);
  Formdata.AddFormField('client_secret', INIClientSecret);
  FormData.Position := 0;

  LResponseStream := TBytesStream.Create;
  try
    IdhttpToken.Request.CustomHeaders.Clear;
    IdhttpToken.Request.CustomHeaders.AddPair('Content-Type','multipart/form-data');
    try
      IdhttpToken.Post(INITokenURL,FormData,LResponseStream);
      LResponseStream.Position := 0;

      //Hier scheint der Memory Leak zu entstehen, aber warum?
      LResponse := TJsonObject.ParseJSONValue(LResponseStream.Bytes, 0, LResponseStream.Size) as TJsonObject;
      try
        // whatever
      finally
        LResponse.Free;
      end;
      LResponseStream.SaveToFile(PrgPath + '\ResponseStream.JSON');
    finally
      // ...
    end;
  finally
    Formdata.Free;
    LResponseStream.Free;
  end;
end;
  Mit Zitat antworten Zitat