Delphi Xe5와 함께 idHTTPserver를 사용하여 중소 기업 환경에서 REST API 서비스를 로컬로 제공하려고합니다. 클라이언트에 파일을 보내기 전에 파일을 처리하기 전에이 시점에서 문제가 발생합니다. 메모리는 프로세스가 완료된 후에 해제되지 않습니다.
생성 된 JSON 객체가 클라이언트에게 올바르게 전송되었습니다. (AngularJS App)TJSONObject 복잡한 json 개체 누수 개체
내가 뭘 잘못하고 있니? 나는 HTTP 클라이언트 요청을 수신 할 때
나는 당신은 결코 TORDEN
변수, 따라서 메모리 누수를 해제하지 않습니다
Procedure TMain.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
Var
// Here Var Types
Json,LFilename:String;
ROOTCOMANDAS,TORDEN,DATA,MSG : TJSONObject;
Dlnew,d : TJSONArray
files:tfilestream;
Begin
LFilename := ARequestInfo.Document;
if AnsiSameText(LFilename, '/resto/orders/jsondata') then
begin
files := TFileStream.Create('htd' + LFilename, fmOpenRead + fmShareDenyWrite);
Json := ReadStringFromStream(files);
files.Free;
ROOTCOMANDAS := TJSONOBJECT.ParseJSONValue(TEncoding.ASCII.GetBytes(Json), 0) as TJSONOBJECT;
try
Data := ROOTCOMANDAS.Get('data').JSONValue as TJSONOBJECT;
d := Data.Get('d').JSONValue as TJSONArray;
dlnew := TJSONArray.Create;
for LValue in d do
if (LValue as TJSONOBJECT).GetValue('ss').Value = '0' then
dlnew.AddElement(LValue);
TORDEN := TJSONOBJECT.Create;
Msg := TJSONOBJECT.Create;
Msg.AddPair(TJSONPair.Create('t', TJSONString.Create('m5000_325')));
Msg.AddPair(TJSONPair.Create('tipo', TJSONNumber.Create(5)));
TORDEN.AddPair(TJSONPair.Create('msg', Msg));
Msg := TJSONOBJECT.Create;
Msg.AddPair(TJSONPair.Create('et', TJSONString.Create(ETAGL)));
Msg.AddPair(TJSONPair.Create('d', dlnew));
TORDEN.AddPair(TJSONPair.Create('data', Msg));
TORDEN.AddPair(TJSONPair.Create('ok', TJSONTrue.Create));
TORDEN.AddPair(TJSONPair.Create('md', TJSONNumber.Create(iFD)));
TORDEN.AddPair(TJSONPair.Create('time', TJSONString.Create(UTC)));
Json := TORDEN.ToString;
AResponseInfo.CacheControl := 'no-cache';
AResponseInfo.CustomHeaders.Values['Access-Control-Allow-Headers'] := 'Content-Type';
AResponseInfo.CustomHeaders.Values['Access-Control-Allow-methods'] := 'GET,POST,OPTIONS';
AResponseInfo.CustomHeaders.Values['Access-Control-Allow-origin'] := '*';
AResponseInfo.CharSet := 'utf-8';
AResponseInfo.Pragma := 'Public';
AResponseInfo.Server := 'Drone';
AResponseInfo.ContentText := Json;
finally
ROOTCOMANDAS.Free;
end;
exit;
end;
지금까지 내가 당신이 TORDEN 변수를 해제하지 않는 볼 수 어디서나 –
예 .. 때문에 내가 알고있는, 내가 오류 얻을 해당 개체를 해제하려고 할 때 ROOTCOMANDAS 또는 Root Object를 해제하면 모든 트리가 해제됩니다. im right no? – JavierDonosoV
사용하는 변수의 유형을 표시하지 않는 이유는 무엇입니까? 그것은 차이를 만들 수 있습니다. 이 디버깅을 시도 했습니까? 전체 FastMM이 누출 된 것을 알려줍니다. 누수가 사라질 때까지 코드를 자르셨습니까? 이러한 기본적인 디버깅 기술을 익히는 것이 모두에게 도움이됩니다. –