2010-07-28 5 views
7

나는 C#을 사용한다.C# GetRequestStream()을 처음 사용하면 20 초 걸린다

내 코드에서 WebRequest GetRequestStream()을 처음 사용하는 경우 최대 20 초가 소요됩니다. 그 후 1 초가 걸립니다.

아래 코드는 제 코드입니다. "this.requestStream = httpRequest.GetRequestStream()"행에서 지연이 발생합니다.

StringBuilder postData = new StringBuilder(100); 
postData.Append("param="); 
postData.Append("test"); 
byte[] dataArray = Encoding.UTF8.GetBytes(postData.ToString()); 

this.httpRequest = (HttpWebRequest)WebRequest.Create("http://myurl.com"); 

httpRequest.Method = "POST"; 
httpRequest.ContentType = "application/x-www-form-urlencoded"; 

httpRequest.ContentLength = dataArray.Length; 

this.requestStream = httpRequest.GetRequestStream(); 

using (requestStream) 
    requestStream.Write(dataArray, 0, dataArray.Length); 

this.webResponse = (HttpWebResponse)httpRequest.GetResponse(); 

Stream responseStream = webResponse.GetResponseStream(); 
StreamReader responseReader = new System.IO.StreamReader(responseStream, Encoding.UTF8); 
String responseString = responseReader.ReadToEnd(); 

어떻게 이것이 발생할 수 있습니까? (대한 예 : DNS 조회 서버 응답하지?) 응용 프로그램이 사전 컴파일를 처음 쳤을 때처럼 소리

감사와 관련, 공원

+0

사실 VMWare NAT 네트워크와 관련된 문제입니다. 나는 아직도 그것이 이상하다고 생각한다. – koen

+0

처음으로 긴 지연이 표시되지 않지만 각 요청마다 커지는 것으로 보입니다. GetRequestStream은 GetResponse의 두 배 정도 걸립니다. –

+0

(Proxy를 null로 설정해도 많은 도움이되지는 않습니다.) –

답변

11

.Proxy = null로 설정할 수도 있습니다. 때로는 시간이 걸리는 프록시 자동 검색을 시도합니다.

+1

이것은 그 것이다. 정말 고마워! 프록시 검색 수행에 20 초가 소요되었습니다. – koen

1

합니다. 이것은 .net 작동 방식입니다.

웹 앱의 속도를 높이는 방법입니다. link text

+0

실제로는 Windows 서비스입니다. 그것은 컴파일 된 후에뿐만 아니라 서비스를 시작할 때마다 발생합니다. – koen

1

실제로는 시작 네트워크 프록시 확인을 수행하여 HTML 작업을위한 프레임 워크로 속성 HttpWebRequest.DefaultWebProxy을 설정합니다.

시작 응용 프로그램의 일부로 응용 프로그램에서이 오버 헤드를 제거하기위한 백그라운드 작업으로 완전히 구성된 요청을 만듭니다.

HttpWebRequest web = (HttpWebRequest)WebRequest.Create(m_ServletURL); 
web.UserAgent = "Mozilla/4.0 (Windows 7 6.1) Java/1.6.0_26"; 

내 경우에 UserAgent 필드를 설정하면 시작 오버 헤드가 트리거됩니다.

0

한 가지 문제점은 .NET, by default, only allows 2 connections at a time 일 수 있습니다.

당신과 함께 동시 연결 수를 늘릴 수 있습니다 :

ServicePointManager.DefaultConnectionLimit = newConnectionLimit; 

우리는 사용자에게 최적 값의 결정을 둡니다.

관련 문제