我目前正在尋找解決REST客戶端的Mac實現中的明顯內存泄漏的方法。的代碼以產生所述內存泄漏是以下的(運行XE8,更新1):德爾福REST 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.
這是演示泄漏的代碼的最小的塊。基本上,我有一個同步服務,每隔一段時間就會發出一次REST請求。
當我在Windows上運行這個使用MadExcept時,沒有發現泄漏。在ProcessMonitor中檢查正在運行的進程顯示正在使用的內存量沒有增加。
但是,當在Mac上運行時,活動監視器會顯示分配給應用程序的內存繼續增加。此外,使用Instruments運行時,似乎在Mac上處理幾個URL和HTTP類的泄漏。
有誰知道如何解決這個泄漏? (另外,確切地知道漏洞來自Mac上的位置真的很有幫助,但唯一列出的Delphi類是TMethodImplementationIntercept。我相信這是由於Delphi不會爲Mac的一個的dSYM文件。如果有人知道周圍的方式,這將是真棒呢!)
UPDATE 通過改變從1 iMax
至10和比較FastMM4輸出,它看來,泄漏是在類Macapi.ObjectiveC.TConvObjID.XForm
。與1次迭代相比,10次迭代輸出包含9次更多的泄漏,將其作爲堆棧跟蹤。我已經把這個報告給Embarcadero作爲RSP-12242。
BTW'TMethodImplementationIntercept'是**不是**類 –
FastMM是否存在Mac?它是否提供詳細的泄漏報告? –
請報告這個質量portal。 –