저는 C#에서 "올바른"네트워크 코드를 작성하는 최선의 방법에 대해 많은 연구를 해 왔습니다.C# 네트워크 프로그래밍 및 리소스 사용
C#의 "using"문을 사용하여 여러 가지 예제를 보았습니다. 그러나 이것은 좋은 접근 방법이라고 생각합니다. 그러나 다양한 식과 일관성없는 사용법을 보아 왔습니다. 예를 들어
, 나는 몇 가지 코드를 다음과 같이 있다고 가정
TcpClient tcpClient = new TcpClient("url.com", 80);
NetworkStream tcpStream = tcpClient.GetStream();
StreamReader tcpReader = new StreamReader(tcpStream);
StreamWriter tcpWriter = new StreamWriter(tcpStream);
물론,이 코드는 매우 색다른 될 것입니다. 그래서, tcpClient에서 사용하는 코드를 보았습니다. 그러나 NetworkStream에도 정리가 필요한 리소스가 있습니까? StreamReader/Writer는 어떻습니까?
내포 된 using 문에 4 개의 문을 모두 감쌀 필요가 있습니까?
만약 그렇다면 시간이 끝나면 어떻게 될까요? StreamWriter가 스트림을 닫고 결과적으로 소켓을 닫지 않습니까? 그런 다음 StreamReader, NetworkStream, TcpClient가 각각 처분 될 때 어떤 일이 발생합니까?
다른 질문이 제기됩니다. StreamReader와 StreamWriter가 같은 스트림으로 구성되어 있는데 누가 소유하고 있습니까? 그들은 둘 다 자신이 그것을 소유하고 있다고 생각하지 않으며, 따라서 그것을 파괴하려고 시도하지 않을 것인가? 아니면 프레임 워크가 스트림이 이미 파괴되었다는 사실을 알고 자동으로 무시합니다.
사용하는 명령문이 체인의 마지막 명령문에만 필요하지만 거의 예외가 발생하면 GetStream()에 어떤 결과가 발생합니까? 나는 소켓을 적절하게 청소할 것이라고 생각하지 않는다. 따라서 중복 사용은 이것이 일어나지 않도록하는 데 필요하다.
누구든지 네트워크 프로그래밍에 대한 최신 지식을 알고 있습니까 ?net 및 prefeably C# 예외 처리 및 리소스 관리에 대한 장을 포함합니까? 아니면 온라인에서 좋은 기사일까요? 내가 찾을 수있는 모든 책은 .NET 1.1 시대 (Microsoft .NET Framework 용 네트워크 프로그래밍, .NET에서의 네트워크 프로그래밍 등)에서 나온 것이므로 좋은 리소스가 필요한 주제처럼 보입니다.
편집 :
, 마크의 아주 좋은 의견이 :)에 대한 주석에서 다른 사람을 중지하지 마십시오
나는, 자원 관리에 누구를 elses 책 권고 또는 의견을 특히 듣고 싶습니다비동기 사용과 관련하여
감사합니다. 이것은 크게 내가 의심했던 것입니다. 나는 NetworkStream이 이상하다는 점에 동의한다. 별도의 스트림을 작성하고 스트림을 작성하는 것이 덜 문제가되는지 확실하지 않지만 그것이 무엇인지 알 수 있습니다. 책 추천 주셔서 감사합니다. –
또한 언급 한 사이트에서 NonClosingStream 구현을 보지 못했습니다. –
거기에 있습니다 - MiscUtil.IO.NonClosingStreamWrapper –