gpt4 book ai didi

macos - Delphi REST mac 内存泄漏

转载 作者:行者123 更新时间:2023-12-03 15:13:31 34 4
gpt4 key购买 nike

我目前正在寻找解决 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 请求。

当我使用 MadExcept 在 Windows 上运行此程序时,没有发现泄漏。在 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。

最佳答案

是的,FastMM4 在最新的 SVN 版本中支持 OSX 泄漏报告。不幸的是,简单的空 Delphi FMX 应用程序的“全局”泄漏使得分析内存日志文件变得困难。 XE10 中修复了一些泄漏,但 MacApi.ObjectiveC 桥中的某些对象仍然会产生泄漏。我已在质量中心和质量门户(QC 和 QP)中报告了这一点。因此使用FastMM4进行检漏比较困难。

请将 Delphi 对象泄漏和 ObjectiveC 泄漏分开,然后您可以使用仪器找到。

关于macos - Delphi REST mac 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32788870/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com