2012-01-31 2 views
0

TCP를 사용하는 레거시 응용 프로그램에 연결하는 VB.NET 응용 프로그램을 작성하고 있습니다.TcpClient 연결 속도를 향상시킬 수있는 방법이 있습니까?

통신은 잘 작동 한 번에 연결 매우 빠르게,하지만 난 내 로컬 컴퓨터에 연결하고 경우에도 새 연결을 만들 때 (약 2.5 ~ 3.5 초) 지연 항상 존재한다 :

Private _client As TcpClient 
Public Property PortNumber As Int32 = 3338 
Public Property ServerName As String = [Local machine name] 

_client = New TcpClient(ServerName, PortNumber) ' <- takes some time to execute this line 

누군가 개선 할 수 있습니까?

답변

4

아마도 이름 확인 문제 일 수 있습니다. 응용 프로그램의 수명 동안 컴퓨터 이름에 해당하는 IP 주소가 변경되지 않는다면 행복하게 해결 한 후 IPAddress를 저장할 수 있습니다.

TcpClient가 수행하는 방식은 Dns.GetHostAddresses(hostname)을 호출 한 다음 다시 가져 오는 목록에서 적합한 주소를 선택하는 것입니다 (예 : IPv4 소켓을 사용하는 경우 IPv4 주소를 선택).

예를 들어 TcpClient의 소스를 살펴보십시오. IP 주소를 얻으면 같은 방식으로 TcpClient를 계속 사용할 수 있습니다.

TCP 연결은 항상 초당이 아닌 밀리 초를 만드는 데 상당히 비쌉니다. 따라서 매우 짧은 수명의 연결을 많이 만드는 경우 TCP가 최선의 선택이 될 수 없습니다. 이것이 NTP 및 DNS와 같은 프로토콜이 일반적으로 UDP 기반이며 사람들이 HTTP에 대한 연결을 다시 사용하려는 노력을하는 이유입니다.

+0

당신은 정확 했습니까 이름이 해상도가되었지만 프레임 워크가 그것을하고있는 것보다'GetHostAddresses'를 사용하여 훨씬 더 빨리 이것을 할 수있는 것이 이상합니다 –

0

TcpClient은 네트워킹 API에서 상당히 높습니다. 어쩌면 Socket 클래스 만 더 높을 수도 있습니다. 나는이 코드의 성능을 많이 향상시킬 수 있다고 생각하지 않는다. 아마도 약간의 네트워크 대기 시간이거나 DNS 확인에 평소보다 오래 걸립니다. 네트워크 관리자에게 문의하십시오.

+0

낮은 것을 의미합니까? TcpClient는 Socket 클래스보다 낮지 않습니다 [TcpClient는 Socket을 사용합니다] –

관련 문제