私は現在、RESTクライアントのMac実装で明らかなメモリリークを回避する方法を模索しています。メモリリークが(XE8、1更新を実行して)以下れる生成するコード:Delphi REST mac memory leak
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.
これは漏れを示すコードの最小のブロックです。基本的に、RESTリクエストを頻繁に行う同期サービスがあります。
MadExceptを使用してWindowsで実行すると、リークは検出されません。 ProcessMonitorで実行中のプロセスを調べると、使用されているメモリの量は増えません。
しかし、Macで実行すると、アクティビティモニタには、アプリケーションに割り当てられたメモリが引き続き増加していることが示されます。さらに、Instrumentsを使用して実行すると、Mac上のいくつかのURLおよびHTTPクラスを扱うリークがあるようです。
誰もこのリークを解決する方法を知っていますか?
(Macでリークがどこから来ているのかを知ることは本当に役立つでしょうが、リストされているDelphiクラスはTMethodImplementationInterceptだけです。これはDelphi Mac用dSYMファイルを生成しません。誰もがあまりにも素晴らしいだろうことを回避する方法を、知っていれば!)
UPDATE を1から10までのiMax
を変化させ、FastMM4出力を比較することにより、それが表示されます漏れはクラスMacapi.ObjectiveC.TConvObjID.XForm
にあります。 10回の反復出力には、1回の反復と比較してスタックトレースとして9回以上のリークが含まれています。私はこれをRSP-12242としてEmbarcaderoに報告しました。
BTW 'TMethodImplementationIntercept'は**ではありません**クラス –
Mac用にFastMMは存在しますか?詳しいリークレポートはありますか? –
品質の高いポータルに報告してください。 –