【发布时间】:2016-12-04 03:16:21
【问题描述】:
我正在使用基本的 DataSnap 服务器。 我正在使用 XE8,Windows 8.1
我有下一个服务器功能:
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 服务器上的内存泄漏。
由于 result 是我创建的 TStream,Datasnap Server 会小心释放它,否则我会遇到内存泄漏问题?
【问题讨论】:
-
服务器如何知道是否以及何时释放流?
-
@MartynA 这是一个具有调用生命周期的 DataSnap 服务器。你还问我想知道什么。
-
对不起,我的 q 有点修辞。 如何服务器可能“知道”在例程中进行了哪些堆分配,更不用说撤消它们了?
-
根据我的经验,这里不会出现内存泄漏。我在我的数据快照服务器中使用 Eurekalog,他们从未在我返回流的方法中检测到内存泄漏。
-
@nolaspeaker:你知道他们说什么,没有证据不是没有证据。在方法返回的流的析构函数上放置一个断点。它什么时候跳闸,是什么触发了它?
标签: delphi memory-leaks datasnap