2009-11-06 8 views

답변

5

"서비스"클래스는 관리되지 않는 리소스에 대한 참조를 유지 관리하는 경우 IDisposable을 구현해야합니다. 이것은 클래스의 클라이언트에게 "Service"의 인스턴스에서 Dispose()를 호출해야한다는 것을 알려줍니다. 클래스의 Dispose() 메소드에서 "DC"에 대해 Dispose()를 호출 할 수 있습니다.

class Service : IDisposable 
{ 
    public DataContext DC= new DataContext(); 

    public void Dispose() 
    { 
     DC.Dispose(); 
    } 
} 

제쳐두고, 속성이 일반적인 관용구 인 C#에서 공용 필드를 만드는 것을 피할 수 있습니다.

+0

를? Dispose 메서드에 더 많이 추가해야합니까, 아니면 GC가 평소와 같이 작동합니까? – zsharp

+0

가비지 컬렉터는 관리되는 클래스를 완벽하게 처리 할 수 ​​있으므로 dispose를 호출하여 관리되지 않는 리소스를 정리하면됩니다. –

1

Service IDisposable을 만들고 Dispose 메서드에서 DataContext를 처리하십시오. 그것은 일반적인 패턴입니다.

1

호스트 클래스에 IDisposable을 구현하고 호스팅 된 DC를 Dispose() 메서드로 처리 할 수 ​​있습니다. 그런 다음 'using'을 사용하여 호스팅 클래스를 사용하십시오.

using(Service service = new Service()) 
{ 
    // do something with "service" here 
} 
1

서비스 클래스는 DataContext를 처리해야합니다.

표준 Dispose pattern을 사용하십시오.

1

는 IDisposable을 구현 : 어떤 서비스 자체의 인스턴스에 대한 MSDN: Implementing a Dispose Method

public void Dispose() 
{ 
    Dispose(true); 

    // Use SupressFinalize in case a subclass 
    // of this type implements a finalizer. 
    GC.SuppressFinalize(this);  
} 

protected virtual void Dispose(bool disposing) 
{ 
    // If you need thread safety, use a lock around these 
    // operations, as well as in your methods that use the resource. 
    if (!_disposed) 
    { 
     if (disposing) { 
      if (DC != null) 
       DC.Dispose(); 
     } 

     // Indicate that the instance has been disposed. 
     DC = null; 
     _disposed = true; 
    } 
} 
관련 문제