小编Dal*_*e M的帖子

当标头中没有返回字符集时,REST请求内存泄漏

使用Delphi 10.2(东京)

下面是一个完整的控制台应用程序的代码,它在调用一个URL时显示意外的内存泄漏(TUTF8Encoding),并且在调用另一个URL时没有内存泄漏.

比较两个响应之间的标头:

泄漏内存的那个包含

 Content-Type=application/json
Run Code Online (Sandbox Code Playgroud)

没有泄漏内存的那个包含

 Content-Type=application/json; charset=utf-8
Run Code Online (Sandbox Code Playgroud)

这是一个错误,还是我应该做些什么来阻止这个?

program RESTMemLeakTest;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, IPPeerClient, REST.Client, REST.Types;

var
  RESTClient1: TRESTClient;
  RESTRequest1: TRESTRequest;
  URL: string;

begin
  ReportMemoryLeaksOnShutdown := True;

  URL := 'https://httpbin.org/post'; // memory leak
  //URL := 'https://jsonplaceholder.typicode.com/posts'; // no memory leak

  RESTClient1 := TRESTClient.Create(URL);
  RESTRequest1 := TRESTRequest.Create(nil);
  try
    try
      RESTRequest1.Client := RESTClient1;
      RESTRequest1.Method := rmPOST;
      RESTRequest1.Execute;
    except
      on E: Exception do
        Writeln(E.ClassName, ': ', E.Message);
    end;
  finally
    RESTRequest1.Free;
    RESTClient1.Free;
  end;
end.
Run Code Online (Sandbox Code Playgroud)

使用泄漏内存的URL运行应用程序会返回:

发生意外的内存泄漏.意外的小块泄漏是:

21 - …

delphi rest memory-leaks

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

标签 统计

delphi ×1

memory-leaks ×1

rest ×1