//클라이언트(약100개정도)들이 보내온 데이타(약1000개정도)를 서버가 디비에 넣는 방식입니다 아래와같이 하면 이상이 없을까요? 걱정이 되서요...
제가 뭐 잘못한거 없나 봐주시고 지적해주세요
procedure TForm1.tcpServerExecute(AThread: TIdPeerThread);
var
Client : TSimpleClient;
Com : String;
begin
{ Get the text sent from the client }
sg_Msg := AThread.Connection.ReadLn;
RecvPacket(AThread);
end
procedure RecvPacket(FThread: TIdPeerThread);;
var Q : TQuery;
begin
// 락을 걸고
FCS.Enter;
try
// 몬가 필요한 작업, DB 입력
Q := TQuery.Create(FThread.Connection);
//클라이언트에서 보내온 데이타를 디비에 저장한다(약1000개정도) - 클라이언트하나당
finally
// 락을 풀고
Q.Free;
FCS.Leave;
end;
end;
TQuery 객체를 Connection마다 생성하는 형식으로 한다면, 굳이 동기화 객체는 사용하지 않아도 될 것 같습니다. 대신 TQuery 객체를 생성할 때마다, 별도의 Database 객체를 지정하지 않으면, TQuery 객체 하나당 TDatabase 객체가 하나씩 생성되는 것으로 알고 있습니다.
이렇게 된다면 최악의 경우 TDatabase 객체가 100개가 생겨날 수 있습니다. 메모리 부족 에러가 날 가능성도 있으니, 위와 같은 상황을 벗어나는 방법으로 흔히들 Database pool을 사용합니다.
참고하시고, 즐프하십시오.