을 통해 생성 된 Stream
이 있다고 해봅시다. 내가 stream.Dispose()
인 경우 Stream
을 생성 한 TcpClient
을 처분해야합니까?TcpClient 자원 처분
답변
ILSpy에서 TcpClient.GetStream
및 TcpClient.Dispose
의 구현을 살펴보면, 스트림에서는 Dispose()
을 호출하지만 클라이언트에서는 호출하지 않으면 리소스 누출이 없어야한다는 데 동의합니다.
그러나 어쨌든 좋은 아이디어라고 확신하지는 않습니다.
나는 TcpClient
의 인스턴스에서 Dispose()
을 호출하는 것을 피하기를 원합니다. TcpClient
이 IDisposable
을 구현한다는 사실에 의해 암시 된 계약은 인스턴스가 더 이상 필요하지 않을 때 Dispose()
을 호출해야한다는 것입니다.
이 계약을 깰 경우
- 그것은 코드의 미래의 관리자들에게 혼동이 될 것입니다?
TcpClient
의 구현이 이후 버전에서 변경되면 어떻게 될까요?
확인. 반사경에게 나 자신을 확인시켜 줬어. TcpClient
에 GetStream
을 호출하면 멤버 m_DataStream이 null이 아닌 값으로 초기화됩니다. 내가 스트림 자신을 처분하는 경우하여 TcpClient에 의해 수행, 나는이 같은 처리를 수행하고있어, 따라서
IDisposable dataStream = this.m_DataStream;
if (dataStream != null)
{
dataStream.Dispose();
}
else
{
//some other disposal strategy
}
:
하여 TcpClient의 처분 방법의 본문은 다음과 같이 보입니다.
내가 알 수있는 한, 스트림을 처리하면 TcpClient를 처리하는 데 불필요합니다.
누군가 동의하지 않습니까?
(제거 된 주석에 대한 응답으로) 스트림이있는 경우 TcpClient가 수행하는 유일한 처리 작업입니다. 따라서 스트림을 처리하면 TcpClient를 수행 할 필요가 없습니다. 따라서 스트림을 수동으로 처리하지 않아도 아무 것도하지 않기 때문에 TcpClient를 처리 할 필요가 없습니다. – spender
- 1. .NET : HashAlgorithm 개체 처분
- 2. ImageList 처분
- 3. ProgressDialog 처분
- 4. MKMapView 처분
- 5. 하여 TcpClient
- 6. TcpClient BottleNeck
- 7. TcpClient 연결
- 8. 자원
- 9. 자원
- 10. 자원
- 11. 자원
- 12. 자원
- 13. 자원
- 14. 자원
- 15. 저장되지 않은 NSManagedObject 처분
- 16. 직렬 포트 처분
- 17. Adox 개체 처분 문제
- 18. 트리 노드 처분
- 19. JDialog 다른 창 처분
- 20. WPF 창 처분
- 21. 숨겨진 양식 처분
- 22. 사용자 지정 개체 처분
- 23. InRequestScope로 주문 처분
- 24. 클래스 로더 처분
- 25. 흥미로운 이벤트 "처분"동작
- 26. NUnit- 개체 처분
- 27. UIImage 및 CGImage 처분
- 28. 타이머 처분 방법은 무엇입니까?
- 29. PHP 헤더 내용 처분
- 30. StringBuilder 객체 처분
이것은 의존성 주입 엉킴으로 귀결되는 결과입니다. 이 리소스 정리 문제에 직면하는 가장 좋은 방법은 거의 확실합니다. 답변을 읽으면 구현 세부 사항에 의존하는 것이 어렵다는 것을 상기시켜줍니다. – spender