자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi TJSONArray Data Clear 문의
2019.11.29 17:16
안녕하세요.
JSON 형식의 데이터를 소켓으로 주고 받는 모듈을 개발 중입니다.
데이터를 주고 받을 때 여러건의 데이터를 JSONArray에 담아서 보관하고 있다가
일정 조건이 만족되면 한꺼번에 보낼려고 합니다.
기존엔 TList를 이용하였었는데
데이터 모듈 생성시에 TList를 생성하고 사용하다가 데이터 모듈 Destroy에서 Free시켜주는 구조로 되어 있습니다.
이것을 JSONArray를 사용하여 똑 같이 하려다보니 데이터를 소켓으로 전송한 다음 보낸 데이터를 제거해야 하는데
데이터를 한번에 지울 수 있는 Clear Procedure가 존재하지 않을 뿐더러 for loop를 돌려 Remove function을 사용하면
문제가 없는 것 처럼 보이지만 JSONArray에 Add 시킨 Object들은 하나도 제거가 안되어 ReportMemoryLeaksOnShutdown
리포트에 무수히 많은 Memory Leak이 보고됩니다.
오버헤드가 많더러도 매번 JSONArray 생성 / 제거 과정을 반복해야하는지
이에 대한 해결책은 없는지요.
구글링을 아무리 해보아도 간단한 사용법만 나와있지 데이터를 클리어 하는 방법은 어디에도 나와있지 않아서
문의 드려봅니다.
감사합니다.
번호 제목 글쓴이 날짜 조회 수
공지
[프로그래밍 강의] 2021.6~2021.12
관리자 2015.01.22 15766
공지
유용한 관련 사이트
관리자2 2014.03.20 54580
공지
본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다.
관리자 2012.01.10 97985
11
radphp xe2 에서 인쇄을 하는 방법 문의 합니다?
자이소 2014.05.10 1777
10
html5 builder에서 html문서 만들때 브라우저에서 한글이 깨집니다.
종달새 2014.02.28 3102
9
html5 buider 문의 드립니다.
씩 2012.12.14 2
8
HTML5 빌더에 대해 문의드립니다.
cyner 2012.09.20 4
7
radphp를 공부해 보려고 하는데요..
[1] 태랑 2012.07.12 7437
6
RadPHP 평가판에서 정품으로 바꾸려는데 어떻게 하나요?
관리자 2012.07.20 7053
5
글씨 크기
[1] 모든길 2012.05.12 9258
4
RAD PHP 개발과정 및 배포방법
[2] cdrd 2012.04.23 9618
3
그리드 연결
[1] 모든길 2012.04.13 8303
2
한글
[3] 모든길 2012.04.12 9256
1
RadPHP와 관련해서 스터디 할만한 자료는 없나요?
관리자 2012.04.10 8150
Delphi TJSONArray Data Clear 문의
2019.11.29 17:16
안녕하세요.
JSON 형식의 데이터를 소켓으로 주고 받는 모듈을 개발 중입니다.
데이터를 주고 받을 때 여러건의 데이터를 JSONArray에 담아서 보관하고 있다가
일정 조건이 만족되면 한꺼번에 보낼려고 합니다.
기존엔 TList를 이용하였었는데
데이터 모듈 생성시에 TList를 생성하고 사용하다가 데이터 모듈 Destroy에서 Free시켜주는 구조로 되어 있습니다.
이것을 JSONArray를 사용하여 똑 같이 하려다보니 데이터를 소켓으로 전송한 다음 보낸 데이터를 제거해야 하는데
데이터를 한번에 지울 수 있는 Clear Procedure가 존재하지 않을 뿐더러 for loop를 돌려 Remove function을 사용하면
문제가 없는 것 처럼 보이지만 JSONArray에 Add 시킨 Object들은 하나도 제거가 안되어 ReportMemoryLeaksOnShutdown
리포트에 무수히 많은 Memory Leak이 보고됩니다.
오버헤드가 많더러도 매번 JSONArray 생성 / 제거 과정을 반복해야하는지
이에 대한 해결책은 없는지요.
구글링을 아무리 해보아도 간단한 사용법만 나와있지 데이터를 클리어 하는 방법은 어디에도 나와있지 않아서
문의 드려봅니다.
감사합니다.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [프로그래밍 강의] 2021.6~2021.12 | 관리자 | 2015.01.22 | 15766 |
공지 | 유용한 관련 사이트 | 관리자2 | 2014.03.20 | 54580 |
공지 | 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. | 관리자 | 2012.01.10 | 97985 |
11 | radphp xe2 에서 인쇄을 하는 방법 문의 합니다? | 자이소 | 2014.05.10 | 1777 |
10 | html5 builder에서 html문서 만들때 브라우저에서 한글이 깨집니다. | 종달새 | 2014.02.28 | 3102 |
9 | html5 buider 문의 드립니다. | 씩 | 2012.12.14 | 2 |
8 | HTML5 빌더에 대해 문의드립니다. | cyner | 2012.09.20 | 4 |
7 | radphp를 공부해 보려고 하는데요.. [1] | 태랑 | 2012.07.12 | 7437 |
6 | RadPHP 평가판에서 정품으로 바꾸려는데 어떻게 하나요? | 관리자 | 2012.07.20 | 7053 |
5 | 글씨 크기 [1] | 모든길 | 2012.05.12 | 9258 |
4 | RAD PHP 개발과정 및 배포방법 [2] | cdrd | 2012.04.23 | 9618 |
3 | 그리드 연결 [1] | 모든길 | 2012.04.13 | 8303 |
2 | 한글 [3] | 모든길 | 2012.04.12 | 9256 |
1 | RadPHP와 관련해서 스터디 할만한 자료는 없나요? | 관리자 | 2012.04.10 | 8150 |
이런식으로 코드해주시면 됩니다.
end;
또다른 방법으로 TJsonObjectWriter라는 클래스를 사용하셔도 됩니다. 한번 생성하시고 마지막에 한번 해제하시면 됩니다.
아래와 같이 사용하시면 됩니다.
procedure TBooksResource1.Get(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
const
SQL_LIST ='SELECT BOOK_SEQ, BOOK_TITLE, BOOK_AUTHOR, BOOK_PRICE FROM BOOK';
var
Writer: TJsonObjectWriter;
begin
qryBook.Close;
qryBook.SQL.Text := SQL_LIST;
qryBook.Open;
Writer := TJsonObjectWriter.Create;
try
Writer.WriteStartObject; // start resource
Writer.WritePropertyName('books');
Writer.WriteStartObject; // start item
Writer.WritePropertyName('total');
Writer.WriteValue(qryBook.RecordCount);
Writer.WritePropertyName('book');
Writer.WriteStartArray;
qryBook.First;
while not qryBook.Eof do
begin
Writer.WriteStartObject;
Writer.WritePropertyName('BOOK_SEQ');
Writer.WriteValue(qryBook.FieldByName('BOOK_SEQ').AsInteger);
Writer.WritePropertyName('BOOK_TITLE');
Writer.WriteValue(qryBook.FieldByName('BOOK_TITLE').AsString);
Writer.WritePropertyName('BOOK_AUTHOR');
Writer.WriteValue(qryBook.FieldByName('BOOK_AUTHOR').AsString);
Writer.WritePropertyName('BOOK_PRICE');
Writer.WriteValue(qryBook.FieldByName('BOOK_PRICE').AsString);
Writer.WriteEndObject;
qryBook.Next;
end;
Writer.WriteEndArray;
Writer.WriteEndObject; // end item
Writer.WriteEndObject; // end resource
AResponse.Body.SetValue(Writer.JSON as TJSONValue, True);
except
Writer.Free;
raise;
end;
end;