2012-10-11 7 views
1

TcpClient 멤버가있는 클래스가 있습니다. 예 :구성원 TcpClient 제대로 처리하기

class CustomNetClient 
{ 
    TcpClient tcp; 
    NetworkStream ns; 
    //... 
} 

제대로 닫히고 싶습니다.

class CustomNetClient 
{ 
    TcpClient tcp; 
    NetworkStream ns; 

    public CustomNetClient() 
    { 
     tcp = new TcpClient("1.1.1.1",80); 
     ns = tcp.GetNetworkStream(); 
    } 

    public void Dispose() 
    { 
     tcp.Close(); 
     ns.Close(); 
    } 

    //... 
} 

을 그리고 응용 프로그램에서 나는 usingCustomNetClient 전화 : 그래서 IDisposable을 구현했습니다.

//... 
using(CustomNetClient nc=new CustomNetClient) 
{ 
    // This will be a long long process, connection will stay open 
} 

이 방법이 좋은 방법인가요? 또는 제안 사항이나 의구심이 있습니까?

답변

0

tcpClient 객체를 릴리스 할 수 있다면 그렇게해야합니다. 즉, CustemNetClient의 수명이 tcpClient가 더 이상 필요하지 않은 경우와 다르면 tcpClient ealier를 해제해야합니다. 그러나 CustomNetClient가 더 이상 tcpClient를 필요로하지 않을 때 동시에 존재한다면 코드가 잘 수행 될 것입니다.

다음과 같은 리소스를 해제해야하는지 궁금해지면 일반적으로 스스로 질문해야합니다. 응답이 예인 경우 "Can I release them correctly any earlier"입니다. 그렇다면 조기 릴리스를 선택해야합니다. 그렇지 않으면 처분 방법이 적절한 선택입니다.

0

finalizer 메서드 및 IDisposable 인터페이스 구현을 구현하는 것이 좋습니다. 어떤 이유로 문 사용이 사용되지 않으면 GC가 finalizer를 호출하고 finalizer가 리소스를 해제합니다. 이것은 기본적으로 실패 안전 메커니즘입니다.