2015-09-25 27 views
5

Tôi hiện đang tìm kiếm một cách xung quanh một rò rỉ bộ nhớ rõ ràng trong việc thực hiện Mac của máy khách REST. Mã để tạo rò rỉ bộ nhớ là như sau (chạy XE8, cập nhật 1):Delphi REST rò rỉ bộ nhớ mac

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. 

Đây là khối mã nhỏ nhất thể hiện sự rò rỉ. Về cơ bản, tôi có một dịch vụ đồng bộ khiến cho các yêu cầu REST thường xuyên như vậy.

Khi tôi chạy ứng dụng này trên Windows, sử dụng MadExcept, không tìm thấy rò rỉ nào. Kiểm tra quá trình đang chạy trong ProcessMonitor cho thấy không tăng số lượng bộ nhớ đang được sử dụng.

Khi chạy trên máy Mac, Trình giám sát hoạt động cho thấy bộ nhớ được cấp cho ứng dụng tiếp tục tăng. Hơn nữa, khi chạy bằng cách sử dụng dụng cụ, có vẻ như là rò rỉ đối phó với một số URL và các lớp HTTP trên mac.

Có ai biết cách giải quyết sự rò rỉ này không?

(Là một sang một bên, nó sẽ thực sự hữu ích để biết chính xác nơi rò rỉ đến từ trên máy Mac, nhưng chỉ có Delphi lớp được liệt kê là TMethodImplementationIntercept.Tôi tin rằng điều này là do thực tế là Delphi không tạo ra một tập tin dSYM cho Mac. Nếu ai biết một con đường xung quanh rằng, điều đó sẽ thật tuyệt vời!)

CẬP NHẬT Bằng cách thay đổi iMax 1-10 và so sánh sản lượng FastMM4, dường như các rò rỉ là trong lớp Macapi.ObjectiveC.TConvObjID.XForm. 10 đầu ra lặp lại chứa thêm 9 rò rỉ với điều này như là một dấu vết stack so với 1 lần lặp. Tôi đã báo cáo điều này với Embarcadero là RSP-12242.

+0

BTW 'TMethodImplementationIntercept' là ** không ** một lớp –

+1

FastMM có tồn tại cho Mac không? Nó có trình bày báo cáo rò rỉ chi tiết không? –

+0

Vui lòng báo cáo điều này với cổng thông tin chất lượng. –

Trả lời

2

Có FastMM4 có hỗ trợ báo cáo rò rỉ OSX trong bản sửa đổi SVN mới nhất. Thật không may, sự rò rỉ "toàn cầu" từ một ứng dụng Delphi FMX rỗng đơn giản khiến cho việc phân tích mem-logfile trở nên khó khăn. Một vài rò rỉ đã được cố định trong XE10 nhưng một số đối tượng trong cầu MacApi.ObjectiveC vẫn tạo ra rò rỉ. Tôi đã báo cáo rằng trong Quality Central & Cổng thông tin chất lượng (QC & QP). Vì vậy, rất khó để sử dụng FastMM4 để tìm kiếm bị rò rỉ.

Vui lòng tách rò rỉ đối tượng Delphi và rò rỉ ObjectiveC, thứ hai bạn có thể tìm thấy bằng các công cụ.

+1

Tôi đã không sử dụng bản sửa đổi SVN mới nhất .. Cảm ơn vì điều đó! – jllangston

+0

Tôi không sử dụng FMX cho thử nghiệm này và loại bỏ vòng lặp trong mã ở trên, FastMM4 báo cáo một số rò rỉ. Hầu hết các năm 1838 được liệt kê là nhỏ, nhưng có 2 trong phạm vi 800 byte và một trong phạm vi byte 2000. – jllangston