TcpClient에서 상속하는 클래스가 있습니다. 그 수업에는 응답을 처리 할 수있는 방법이 있습니다. 그 메서드에서 나는 MyBase.GetStream으로 NetworkStream을 얻고 그것을 호출한다.NetworkStream.Read 지연 .Net
이렇게하면 처음 읽는 블록을 너무 오래 쓸 수 있습니다. 그리고 너무 오랫동안 소켓에 많은 양의 데이터가 수신되었지만 임의의 한도에 도달 할 때까지 읽지는 않습니다. Wire Snark 패킷 스니퍼를 사용하여 많은 데이터를 수신하고 있음을 알 수 있습니다.
아주 작은 양 (단지 몇 바이트와 같은)을 사용하지 않도록 recieve 버퍼를 설정했습니다. read 메소드에 전달한 버퍼 바이트 배열과 동일한 작업을 수행했으며 여전히 지연되었습니다.
다른 방법으로 입력하십시오. 나는 600k를 다운로드 중이다. 다운로드에는 5 초가 걸립니다 (서버에 대해 100k/초 이상 연결하면 의미가 있습니다). 초기 읽기 호출은 2 ~ 3 초 걸리고 256 바이트 만 사용할 수 있다고 알려줍니다 (256은 수신 버퍼와 내가 읽는 배열의 크기입니다). 마술처럼 다른 몇 십만 바이트는 256 바이트 청크에서 각각 몇 개의 프로세스 틱에서 읽을 수 있습니다. 패킷 스니퍼 (packet sniffer)를 사용하여, 나는 처음 2-3 초 동안 소켓이 단지 256 바이트 이상을 수신했다는 것을 안다. 내 연결은 3 초 동안 0.25k/초가 아니고 2 초 동안 400k가 아니 었습니다.
들어오는 소켓에서 바이트를 가져 오는 방법은 무엇입니까?
NIC와 앱 사이에 어떤 것이 있습니까? 방화벽, 바이러스 스캐너, CRL, 프록시를 사용하지 않도록 설정하십시오. –
nobugz, 그게 문제였습니다. 내 안티 바이러스 앱 이었어. 그것을 소켓 버퍼에 보내기 전에 특정 바이트를 버퍼링하여 스캔해야합니다. 스캔 할 잘 알려진 포트를 사용하고 있기 때문에 어떤 의미가 있습니다. 나는 그것에 대해 생각하지 않았다는 것을 믿을 수 없다. 답변을 게시하여 좋은 것으로 표시 할 수 있습니다. – Gilbes