2012-05-03 2 views
16

웹 사이트를 크롤링하는 C#으로 멀티 스레드 프로그램을 작성했지만 백그라운드 요청에서 Fiddler를 시작했을 때 12 배 빨랐지만 필자가 Fiddler 다운로드 속도를 닫으면 정말 이상합니다. 속도가 느려집니다. 가능하다면 어떻게 도와 주시겠습니까? (ineternet과 Fiddler에 대한 연결 설정은 없습니다.) 내 응용 프로그램에서 피들러 성능을 주입 할 수 있다면 멋지 겠지요? 장면 뒤에 어떤 마술이 있습니까 ?? :)Fiddler에서 Http 요청이 빠르게 타격을주고있는 이유

감사합니다.

답변

11

사람들이 이것을 확인할 수 있도록 몇 가지 샘플 코드를 보여줄 수 있습니까? 그렇지 않으면 야생의 추측이 될 것입니다.

내 생각에 Fiddler uses keepalive을 사용하면 연결을 반복해서 열지 않아도됩니다. Reuse client connectionsReuse connections to servers을 모두 비활성화하여이를 확인할 수 있습니다. 평소와 같이 느린 경우 (또는 느린 경우) 연결을 유지하면 이점을 얻을 수 있습니다.

+0

내 프로그램에서 연결을 만들고 콘텐츠를 다운로드하면 응답을 닫고 마지막으로 요청을 중단하지만이 코드가 백그라운드에서 피들러와 함께 실행되는 동일한 코드인지 궁금합니다. 빠른. Fiddler가 내 요청을 변경하고 각 요청에 대해 동일한 연결을 사용합니까? – Ehsan

+0

@Eshan _ "Fiddler가 요청을 변경하고 각 요청에 대해 동일한 연결을 사용합니까?"_ 예. – CodeCaster

+1

그래서 내 프로그램에서 HttpWebRequest를 사용하여이 기능을 사용할 수 있습니까? – Ehsan

22

이유는 Fiddler를 사용할 때 무시되는 HTTP 연결의 양에 대한 제한입니다.

System.Net.Http.HttpClient을 사용하여 여러 (~ 80) 동시 요청을 수행하는 동안 동일한 문제가 발생했습니다. Fiddler가 실행되면서 모든 요청이 훨씬 빨리 완료되었습니다. Keep-alive가 확실히 활성화되었습니다.

나는 Wireshark를 사용하여 무슨 일이 일어나고 있는지, 그리고 http 트래픽의 방식이 다르다는 것을 알았습니다. 피들러 (Fiddler)의 요청이 한꺼번에 던져지면서 응답이 멋지게 그룹화되었습니다. Fiddler가 없으면 요청이 응답으로 인터리빙되었습니다.

두 번째로, tcpview는 Fiddler가없는 코드가 서버에 단 2 개의 TCP 연결을 생성했다는 것을 보여주었습니다. Fiddler가 시작됨에 따라 연결 수가 크게 증가했습니다. 내 앱에서 피들러까지 수십 명이 있었는데, 그 다음 피들러에서 서버까지.

http 표준은 http 연결 수를 2 개 이하로 권장하고 HTTP 클라이언트의 기본 설정으로 제한이 구현 된 것으로 알려져 있습니다.

.NET 응용 프로그램에서는 ServicePointManager.DefaultConnectionLimit 정적 속성으로 제한을 제어 할 수 있습니다. 실험으로 100으로 설정하면 Fiddler의 유무에 관계없이 요청이 동일한 속도로 실행됩니다.

이제
<system.net> 
    <connectionManagement> 
     <add address="*" maxconnection="100" /> 
    </connectionManagement> 
</system.net> 

, 왜 기본 연결 제한이 피들러를 사용하는 동안 존중되지 않습니다

설정도의 app.config를 통해 제어 할 수 있습니까? http 클라이언트가 프록시를 사용하고 Fiddler가 프록시 역할을하는 경우 한계가 다릅니다. this old article 외에도 프록시 연결 제한에 대한 많은 정보를 찾지 못했습니다.

관련 문제