我目前正在设计一个Datasnap休息服务器与德尔福。但我有严重的内存泄漏。德尔福XE8:内存泄漏与方法datasnap服务器
例如,我的方法站
procedure TV1.station(ID: integer);
begin
GetInvocationMetadata().ResponseContent := Manager.xxxxxxAPI.GetObjectStation(ID);
GetInvocationMetadata().CloseSession := true;
end;
哪个调用这个函数:
function TSmmAPI.GetObjectStation(const ID: integer) : string;
(...)
jsonObject := TJSONObject.Create;
stationSelected := xxxxxManager.WorkShops.GetStation(CNCHandle);
with StatesDB.QueryGetCurrentState(stationSelected.Handle) do begin
if RecordCount <> 0 then begin
ConvertFileToPcom(stationSelected.Ini.FileName, Pcom);
jsonObject.AddPair(TJSONPair.Create('ID', inttostr(ID)));
jsonObject.AddPair(TJSONPair.Create('Name', FieldByName(sbStaStationField).AsString));
jsonObject.AddPair(TJSONPair.Create('Workshop', stationSelected.Shop.Name));
jsonObject.AddPair(TJSONPair.Create('Group', Pcom.Others.GroupName));
jsonObject.AddPair(TJSONPair.Create('CurrentRef', FieldByName(sbStaRefNameField).AsString));
jsonObject.AddPair(TJSONPair.Create('CurrentState', FieldByName(sbStaStateField).AsString));
jsonObject.AddPair(TJSONPair.Create('Job', FieldByName(sbStaOPNameField).AsString));
jsonObject.AddPair(TJSONPair.Create('Order',FieldByName(sbStaOFNameField).AsString));
//(...), I have 12 addpair.
Disconnect;
end;
Destroy;
end;// with StatesDB.QueryGetCurrentState
result := jsonobject.toString;
jsonObject.FreeInstance;
end;
你可以看到,我用的是resultContent的结果,而不是从一个函数,因为我不想要结果:在我的JSON响应。
因此,从ReportMemoryLeaksOnShutdown的报告中,我看到我所有的jsonObject和每个jsonpair都不会销毁!从服务器类
Result leak memory report, 5501 request from my client application
生命周期:会话
我用DSRESTWebDispatcher,在60000
有人在会议周期和Timout设置有一个解释?我忘了做什么?
是它的工作原理,谢谢尼尔斯来电
Free
! – Stackier