2015-09-25 7 views
5

Ich suche derzeit nach einem Weg um ein offensichtliches Speicherleck in der Mac-Implementierung des REST-Clients. Der Code zu erzeugen, der Speicherverlust ist folgende (Lauf XE8, aktualisiert 1):Delphi REST mac Speicherleck

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. 

Dies ist der kleinste Code-Block ist, dass das Leck zeigt. Im Wesentlichen habe ich einen Synchronisierungsdienst, der gelegentlich REST-Anforderungen stellt.

Wenn ich dies unter Windows mit MadExcept ausführe, werden keine Lecks gefunden. Wenn Sie den laufenden Prozess in ProcessMonitor überprüfen, erhöht sich die Speicherkapazität nicht.

Bei Ausführung auf einem Mac zeigt der Aktivitätsmonitor jedoch an, dass der der App zugewiesene Speicher weiterhin steigt. Bei der Verwendung von Instru- menten scheint es außerdem Probleme mit mehreren URL- und HTTP-Klassen auf dem Mac zu geben.

Weiß jemand, wie man dieses Leck auflöst?

(Nebenbei, es wäre wirklich hilfreich zu wissen, wo genau das Leck von Mac kommt, aber die einzigen aufgeführten Delphi-Klassen sind die TMethodImplementationIntercept. Ich bin der Meinung, dass dies aufgrund der Tatsache ist, dass Delphi keine DSYM Datei für Mac zu erzeugen. Wenn jemand einen Weg, um das weiß, dass wäre genial!)

UPDATE von iMax von 1 bis 10 variieren und die FastMM4 Ausgabe vergleicht, scheint es, dass die Leck ist in der Klasse Macapi.ObjectiveC.TConvObjID.XForm. Die 10-Iterationsausgabe enthält 9 weitere Lecks mit dieser als eine Stapelspur im Vergleich zu der 1-Iteration. Ich habe dies Embarcadero als RSP-12242 gemeldet.

+0

BTW 'TMethodImplementationIntercept' ist ** nicht ** eine Klasse –

+1

Existiert FastMM für Mac? Zeigt es detaillierte Leckberichte? –

+0

Bitte melden Sie dies dem Qualitätsportal. –

Antwort

2

Ja FastMM4 unterstützt OSX-Leckberichte in der neuesten SVN-Revision. Unglücklicherweise macht das "globale" Lecken von einer einfachen leeren Delphi-FMX-Anwendung es schwierig, die Mem-Log-Datei zu analysieren. Einige Lecks wurden in XE10 behoben, aber einige Objekte in der MacApi.ObjectiveC-Bridge erzeugen immer noch Lecks. Ich habe das in Quality Central & Qualitätsportal (QC & QP) gemeldet. Daher ist es schwierig, FastMM4 für die Lecksuche zu verwenden.

Bitte trennen Sie Delphi-Objekt-Lecks und Objective-Lecks, die Sie mit Instrumenten finden können.

+1

Ich habe nicht die neueste SVN-Revision verwendet. Danke dafür! – jllangston

+0

Ich verwende keine FMX für diesen Test und entferne die Schleife im obigen Code, FastMM4 meldet eine Reihe von Lecks. Die meisten der aufgelisteten 1838 sind klein, aber es gibt 2 im Bereich von 800 Byte und einen im Bereich von 2000 Byte. – jllangston