macos – 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. 这是演示泄漏的最小代码块.从本质上讲,我有一个同步服务,每隔一段时间就会发出一次REST请求. 当我在Windows上运行它时,使用MadExcept,没有发现泄漏.检查ProcessMonitor中的运行进程表明没有增加使用的内存量. 但是,在Mac上运行时,活动监视器会显示分配给应用程序的内存继续上升.此外,当使用Instruments运行时,似乎存在泄漏处理mac上的几个URL和HTTP类. 有人知道如何解决这个漏洞吗? (顺便说一句,确切知道泄漏来自Mac的确切位置真的很有帮助,但列出的唯一Delphi类是TMethodImplementationIntercept.我相信这是因为Delphi没有生成一个适用于Mac的dSYM文件.如果有人知道解决方法,那也很棒!) UPDATE 解决方法
是的FastMM4在最新的SVN版本中具有OSX泄漏报告支持.不幸的是,一个简单的空Delphi FMX应用程序的“全局”泄漏使得分析mem-logfile变得困难. XE10中已修复了一些泄漏,但MacApi.ObjectiveC桥中的某些对象仍然会产生泄漏.我在Quality Central&质量门户(QC和QP).因此,使用FastMM4进行泄漏检测很困难.
请分离Delphi对象泄漏和ObjectiveC泄漏,其次你可以找到仪器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |