Attualmente sto cercando un modo per aggirare una perdita di memoria apparente nell'implementazione Mac del client REST. Il codice per generare la perdita di memoria è il seguente (XE8 esecuzione, modificare 1):Delphi REST perdita di memoria mac
program mac_REST_leak_test;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, REST.Client, REST.Types, IPPeerClient;
var
request : TRestRequest;
ii, iMax : integer;
begin
iMax := 1;
for ii := 0 to iMax do
begin
request := TRestRequest.Create(nil);
// Fake Online REST API for Testing and Prototyping
request.Client := TRestClient.Create('http://jsonplaceholder.typicode.com/');
request.Method := rmPOST;
request.Execute();
request.Client.Free();
request.Free();
end;
end.
Questo è il blocco più piccolo di codice che dimostra la perdita. Essenzialmente, ho un servizio di sincronizzazione che fa richieste di REST ogni tanto.
Quando si esegue questo su Windows, utilizzando MadExcept, non vengono trovate perdite. L'analisi del processo in esecuzione in ProcessMonitor non mostra alcun aumento della quantità di memoria utilizzata.
Quando si esegue su un Mac, tuttavia, il monitor Attività mostra che la memoria allocata all'app continua ad aumentare. Inoltre, quando viene eseguito utilizzando gli strumenti, sembra che ci siano perdite relative a diverse classi URL e HTTP su mac.
Qualcuno sa come risolvere questa perdita?
(Per inciso, sarebbe davvero utile sapere esattamente da dove proviene la perdita su Mac, ma le uniche classi di Delphi elencate sono TMethodImplementationIntercept. Devo credere che questo sia dovuto al fatto che Delphi non genera un file dSYM per Mac. Se qualcuno conosce un modo per aggirare questo, che sarebbe troppo impressionante!)
UPDATE variando iMax
da 1 a 10 e confrontando l'uscita FastMM4, sembra che il la perdita è nella classe Macapi.ObjectiveC.TConvObjID.XForm
. L'output a 10 iterazioni contiene 9 perdite in più con questo come traccia stack rispetto all'iterazione 1. Ho segnalato questo a Embarcadero come RSP-12242.
BTW 'TMethodImplementationIntercept' è ** non ** una classe –
FastMM esiste per Mac? Presenta report dettagliati sulle perdite? –
Si prega di segnalare questo al portale di qualità. –