小编jll*_*ton的帖子

Delphi REST mac内存泄漏

我目前正在寻找一种方法来解决REST客户端的Mac实现中的明显内存泄漏问题.生成内存泄漏的代码如下(运行XE8,更新1):

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.
Run Code Online (Sandbox Code Playgroud)

这是演示泄漏的最小代码块.从本质上讲,我有一个同步服务,每隔一段时间就会发出一次REST请求.

当我在Windows上运行它时,使用MadExcept,没有发现泄漏.检查ProcessMonitor中的运行进程表明没有增加使用的内存量.

但是,在Mac上运行时,活动监视器会显示分配给应用程序的内存继续上升.此外,当使用Instruments运行时,似乎存在泄漏处理mac上的几个URL和HTTP类.

有人知道如何解决这个漏洞吗?

(顺便说一句,确切知道泄漏来自Mac的确切位置真的很有帮助,但列出的唯一Delphi类是TMethodImplementationIntercept.我相信这是因为Delphi没有生成一个适用于Mac的dSYM文件.如果有人知道解决方法,那也很棒!)

更新 通过iMax从1到10 变化并比较FastMM4输出,似乎泄漏是在类中Macapi.ObjectiveC.TConvObjID.XForm.与1次迭代相比,10次迭代输出包含9次泄漏,其作为堆栈跟踪.我已将此报告给Embarcadero作为RSP-12242.

delphi rest macos memory-leaks delphi-xe8

5
推荐指数
1
解决办法
235
查看次数

标签 统计

delphi ×1

delphi-xe8 ×1

macos ×1

memory-leaks ×1

rest ×1