Q&A

  • 한번 봐주세요
//클라이언트(약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;
4  COMMENTS
  • Profile
    srookie 2006.04.28 20:07
    안녕하세요.
    TQuery 객체를 Connection마다 생성하는 형식으로 한다면, 굳이 동기화 객체는 사용하지 않아도 될 것 같습니다. 대신 TQuery 객체를 생성할 때마다, 별도의 Database 객체를 지정하지 않으면, TQuery 객체 하나당 TDatabase 객체가 하나씩 생성되는 것으로 알고 있습니다.
    이렇게 된다면 최악의 경우 TDatabase 객체가 100개가 생겨날 수 있습니다. 메모리 부족 에러가 날 가능성도 있으니, 위와 같은 상황을 벗어나는 방법으로 흔히들 Database pool을 사용합니다.
    참고하시고, 즐프하십시오.


  • Profile
    델파이-델짱 2006.04.29 18:14
  • Profile
    srookie 2006.05.03 19:58
    안녕하세요.
    DB Pool은 보통 일정 개수의 Database 객체를 생성하여 Database connection을 맺은 후에, DB에 대한 요청이 들어오면 해당 요청에 생성되어있는 Database 객체를 할당해 주는 그런 방식이죠.
    자세한 사항은 인터넷을 검색하셔도 구현된 소스등을 찾을 수 있을 겁니다.
    즐프하세요~

  • Profile
    델파이-델짱 2006.05.05 02:41