2017-02-04 1 views
1

내 코드, 응답 1 초 동안 경과 시간, ReadToEnd (경과 시간) - 0.5 초, 기타 모든 코드를 최적화해야합니다. (전체 웹 요청 포함)은 0.1 초 밖에 걸리지 않습니다.С # (.NET), 웹 응답 성능을 수정하는 방법, 경과 시간이 너무 많음

request2.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

//This 1sec+ 
HttpWebResponse response = (HttpWebResponse)request2.GetResponse(); 
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 

//This 0.5sec+ 
string mem = sr.ReadToEnd(); 
sr.Close(); 

피씨 : HTML 코드는 약 200k + 문자들이지만, 나는 단지 4-5 만 필요하다.

답변

0

usingsetting proxy to null을 사용하는 다른 제안에 덧붙여 모든 것을 읽는 대신 특정 양의 숯을 읽는 것이 좋습니다.

var content = new char[10]; 
sr.Read(content, 0, content.Length); 
string contentStr = new String(content); 
2

HttpWebResponse의 프록시 설정을 지정하지 않은 것이 지연의 원인입니다. 프록시가 사용되지 않아도 프록시를 설정하는 것이 항상 권장됩니다. 또한 using 절을 사용하십시오 :

request2.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

request2.Proxy = null; 
using (HttpWebResponse response = (HttpWebResponse)request2.GetResponse()) 
{ 
    StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 
    string mem = sr.ReadToEnd(); 
} 
+1

도움이되지 않습니다, 같은 시간 (1.5-1.7 초) –

0

다른 서비스에 의존 나던 당신의 js 스크립트를 확인 등 저장소 그것은 내 프로젝트에 전에 나를 위해 일했다. 다운로드하여 로컬 폴더로 이동

2

초기 GetResponse 호출은 보안 협상을 생성하고 Get 및 excecute, 처음 몇 바이트가 HTTP 응답 코드 (200,500,404 등)를 포함하는 HTTP 응답을 생성합니다.

응답 본문이 클라이언트 Http 버퍼에 이미 수신되었거나 여전히 스트림으로 스트리밍되고있을 수 있습니다. 실제로 알 수는 없습니다. 두 번째 호출 (readToEnd)은 수신 버퍼의 모든 바이트를 읽고 서버가 HTTP 헤더에 표시된 모든 바이트를 전송할 때까지 대기합니다.

코드는 웹 서비스 호출의 실행 시간에 상당한 비용을 발생시키지 않을 가능성이 높으며 optmisation 단계를 볼 수 없습니다. 클라이언트 코드없이 호출하는 데 걸리는 시간을 결정해야합니다.

Telerik Fiddler를 사용하여 대상 웹 서비스에서 호출되는 바이트 수 및 서버에서 클라이언트로의 원시 전송 시간을 추적합니다. 피들러 또는 웹 브라우저에서 URL을 호출하기 만하면됩니다. 이렇게하면 코드, 서버 또는 연결 대기 시간에 소요되는 시간이 분리됩니다.

+0

205241 (수) + 1809 (게시물), 웹 브라우저에서 2.6 초, + 1789 205219 내 클라이언트 2.1 초. 그래서 바이트 길이는 동일하지만 두 번째 응답에서 205k가 필요하지 않습니다. 전체 HTML 코드에서 단 하나의 숫자 만 가져야합니다. 코드의 일부만 가져올 수 없습니까? 응답은 항상 모든 HTML 페이지를 차지합니까? –

+0

여기에 요점을 놓칠 수도 있습니다 - 서버가 Get 호출에 응답하는 데 얼마나 걸립니까? 이것이 무료 인 Fiddler를 권장하는 이유이며, 첫 번째 바이트가 클라이언트에서 다시 수신되는 데 걸리는 시간을 알려줍니다 ("첫 번째 바이트까지의 시간"및 "마지막 바이트까지의 시간"). 데이터 전송에 소요되는 시간과 서버가 보내는 데이터를 만드는 데 걸리는 시간을 알 수 없습니다. Fiddler의 "첫 번째 바이트까지의 시간"은 코드를 가져올 절대적인 최소값입니다. 따라서 코드를 아는 것이 중요합니다. 205k 데이터가 사소한 시간을 필요로 할 수 있습니다. – PhillipH