Triple-DES 연산때문에 rand()함수를 호출해서 난수를 생성하는데
rand() 호출할때마다 메모리가 증가하네요.
이 부분을 막으니 메모리 증가는 없습니다.
//---------------------------------------------------------------------------
//Get Random Function
//---------------------------------------------------------------------------
void __fastcall TServerSocketThread::SRand(BYTE* bRandValue)
{
int nPreRand = 0;
for(int nCnt = 0; nCnt < 8; nCnt++)
{
nPreRand = (int)GetTickCount() + (int)ClientSocket->Handle;
bRandValue[nCnt] = (BYTE)((nPreRand / (nCnt + 3)) % 255);
}
}
위와같이 난수생성 함수 만들었습니다.
난수 테이블을 만들렸고 했지만 귀찮아서...^^
이렇게 하니 메모리 문제는 없습니다.
믿거나 말거나지만....--;;;;
또한 Thread에서 외부 CPP에서 함수를 호출하는데
이상하게 메모리가 증가하네요.
그래서 외부 함수를 Thread내로 옮기니 메모리 증가는 없습니다.
믿거나 말거나지만...
Thread Execute() 함수를 끝낼때
Synchronize(Terminate); //Terminate();
를 호출하지 않으니 쓰래드가 4000개 정도 생성된후 생성되지 않습니다.
이 부분은 쓰래드 한개당 1MB 스택이 할당되서 4G 이상은 생성되지 않는것으로 보입니다.
아무래도 쓰래드 종료시 free가 제대로 않되는거 같은데요.....
그래서
try
{
...
}
__finally
{
...
Synchronize(Terminate);
}
했더니 20000개 까지 테스트 해봤는제 문제 없습니다.
(장성호님글 참조하세요. http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=52294)
믿거나 말거나지만...
혹시 저와 같은 고민하시는분 계시면 위에 부분 코드 확인해보세요.
아...몇일동안 메모리때문에 고생했는데 속이 후련하네요. ^^;;;;
도움주신분들께 감사하다는 인사드립니다. ^^
|