使用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 - …