해결된 질문
작성
·
90
0
안녕하세요 강의 참고하면서 서버 만들어 보고 있는데
https://learn.microsoft.com/ko-kr/dotnet/api/system.net.sockets.socketasynceventargs?view=net-8.0#remarks
해당 문서에서 pooling이 있더라구요 생각해보니 동접이 꽤 많다라고 가정하면(약 3000?) 이 SocketAsyncEventArgs 생성 소멸이 많이 일어난다고 생각했습니다.
그래서 pooling을 한번 만들어보고 있는데 만드는 중에 Dispose를 언제 해줘야 할지 감이 잘 안옵니다.
현재는 Client가 Disconnect될 때 Push하게 되는데 Push에서 poolCount가 3000이 넘으면 이걸 AllClear라는걸로 pool에 있는 SocketAsyncEventArgs를 다 Dispose해주는 상황인데 이렇게하면 3000이 넘기 전까지는 메모리에 계속 남아 있으니 먼가 찜찜합니다.
이런 문제가 있는데 좋은 해결책이 있을까요?
감사합니다!
답변 1
1
우선 현재 M2 서버에서는
Session 쪽에 제일 많이 사용하는 read/write 관련된 AsyncEventArg를
멤버 변수로 들고 있으면서 계속 재사용합니다. (사실 이게 풀링보다 상위 호환이죠!)
따라서 생각보다 풀링을 적용하더라도 별다른 차이가 일어나지 않을 확률이 높습니다.
Session 생성/소멸은 아주 빈번하게 일어나는 것이 아니기 때문이죠.
풀링을 한다면 차라리 Session을 풀링해서 몇 천개를 미리 만들어놓는 것을 고려할 수는 있겠네요.