jll*_*ton 5 delphi rest macos memory-leaks delphi-xe8
我目前正在寻找一种方法来解决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.
小智 2
是的,FastMM4 在最新的 SVN 版本中支持 OSX 泄漏报告。不幸的是,简单的空 Delphi FMX 应用程序的“全局”泄漏使得分析内存日志文件变得困难。XE10 中修复了一些泄漏,但 MacApi.ObjectiveC 桥中的某些对象仍然会产生泄漏。我已在质量中心和质量门户(QC 和 QP)中报告了这一点。因此使用FastMM4进行检漏比较困难。
请将Delphi对象泄漏和ObjectiveC泄漏分开,然后您可以使用仪器找到。
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |