私は基本的なDataSnapサーバを使用しています。 私はXE8を使用しています、窓8.1TStreamとメモリリークを返すDelphiのDataSnap関数
私は次のサーバ機能を持っている:
function TSrvServerMetodos.ImagePac(pront:integer): TStream;
var blob:TStream;
strm:TMemoryStream;
begin
with qrytemp do begin
Params.Clear;
SQL.Clear;
SQL.Add('SELECT F.PICTURE FROM CLIENTES F WHERE F.PRONT=:pront');
UnPrepare;
Prepare;
Params[0].Value:=pront;
Open;
if IsEmpty then result:=nil
else begin
try
Result := CreateBlobStream(fieldbyname('pict'),bmRead);
GetInvocationMetadata.ResponseContentType := 'image/jpeg';
except
Result:=nil
end;
end;
end;
end;
私のクライアントアプリは、Androidアプリです。すべてうまく動作し、私は薬を得ることができます。
私の疑問は、Datasnapサーバー上のメモリリークに関するものです。
結果は作成したTStreamなので、Datasnap Serverはそれを解放するために注意を払うか、メモリリークに問題がありますか?
ストリームを解放するかどうか、およびストリームを解放するタイミングをサーバーがどのように知っていますか? – MartynA
@MartynAこれは、起動ライフサイクルを持つDataSnapサーバーです。あなたはまた私が知りたいことを尋ねます。 –
申し訳ありませんが、私のqは少し修辞的でした。どのようにしてサーバがルーチン内のヒープ割り当てを "知っている"ことができるのでしょうか? – MartynA