2011-12-19 5 views
3

약간의 상용구 (boilerplate) UDP 코드를 프로파일 링했으며 약간의 소량의 데이터 (내 의도) 만 보내는 속도가 매우 좋았습니다.UDP "연결"-Ceed #

그러나 "연결"방법은 "보내기"방법에 비해 "매우 느립니다". 이 50 소요 - 80 MS : Byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?");

udpClient.Send(sendBytes, sendBytes.Length);

내가이 "연결"궁금해 방법 : 다음 거의 1 MS에 의해 프로파일되지 보내기 udpClient = new UdpClient(); udpClient.Connect("HOSTNAME", 11000);

그것 때문에 놀라운 빠른 때문에 UDP는 설계 상 비 연결이기 때문에 그렇습니다. udpClient.Send(sendBytes, sendBytes.Length,"HOSTNAME",1100);

은 "연결"속도를 개선하기 위해 모든 기회 :

나는 연결 방법을 떠날 경우, 전송 통화 당 느리다?

면책 조항 : 나는 UDP가 신뢰할 수 없다는 것을 알고 있지만, 패키지 (어쨌든 100 % 정확하지 않은 클라이언트 통계)는 패키지가 잘못된 순서로오고 일부 손실 된 패키지가 나를 죽이지 않아도 상관 없습니다.

+0

제 질문은 100 % 정확하지 않았습니다. UdtClient 클래스의 인스턴스를 만들면 이미 30-40ms가 소요됩니다. 연결하여 최대 80ms – andreas

답변

6

udpClient.Connect는 기본 호스트 이름과 포트를 설정하므로 이후에 지정하지 않고 보내기를 호출 할 수 있습니다. 시간은 호스트 이름을 IPAddress로 변환하는 이름 확인입니다.

연결에서 한 번 수행하면 전송할 때마다 더 빨리 수행 할 필요가 없습니다.

+0

** 확실한 지 모르겠는지 ** ** 이름 확인 만. 그러나 IP를 사용하는 것이 더 빠릅니다. .NET의 DNS 캐싱을위한 좋은 링크는 무엇입니까? IE 나 FF의 DNS 캐시를 사용하면 좋을 것입니다. 아니면 이미 UDP 클라이언트가 DNS 캐시를 사용하고 있습니까? – andreas

+0

OS가 가지고있는 어떤 메커니즘을 사용 하리라 생각합니다. 그러나, 왜 당신을 괴롭 히고 있습니까? 한 번 (한 시간에 한 번) 그것을 해결하고 잊어 버리지 않는 이유는 무엇입니까? – zmbq

0

나는 다음과 같은 conlusion에 온 :

빠른 C 번호와 UDP를 만들 수있는 방법이 없습니다. 표준 MSDN 샘플을 사용하는 UdpClient가 최선의 선택입니다.

나는 윈속의 핵심 API의 래퍼 발견 http://www.elitepvpers.com/forum/co2-programming/159327-advanced-winsock-c.html

을하지만 쳤을 때 속도가 rougly 관리 UdpClient와 동일 (http://msdn.microsoft.com/en-us/library/windows/desktop/ms737625(v=vs.85).aspx 참조) "연결".