Fiddler를 사용하는 동안 HTTPWebrequest 객체의 성능이 향상되는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1022844

  •  06-07-2019
  •  | 
  •  

문제

나는 httpwebrequest로 매우 이상한 행동을 받고 있습니다. 누군가가 나를 도울 수 있기를 바랍니다. httpwebrequest 객체를 사용하여 대상 웹 사이트의 내용을 검색하여 일부 집계 작업을 수행하는 콘솔 앱이 있습니다. 요구 사항의 특성으로 인해 앱은 멀티 스레드이며 10에서 30 사이의 동시 연결을 시도합니다 (다양한 값을 실험 해 왔음). 실제 웹 요청은 다음과 같이 구성됩니다.

var req = (HttpWebRequest)WebRequest.Create(url);
WebResponse resp = req.GetResponse();
Stream s = resp.GetResponseStream();
var sr = new StreamReader(s, Encoding.ASCII);
string doc = sr.ReadToEnd();
sr.Close();
resp.Close();
return doc;

어쨌든, 이상한 행동은 정상적인 상황에서 앱이 분당 약 120 개의 요청을 달성하고 있지만 피들러를 열면 약 600으로 이동한다는 것입니다. Windows 7 리소스 모니터를 사용하면 네트워크 활동이 그에 따라 증가 할 수 있습니다. 콘솔 프로세스의 TCP 연결은 이제 원격 주소를 대상 서버 IP 주소 (예상) 대신 "IPv4 루프백"으로 나열합니다. 기계가 허용하는 동시 HTTP 요청의 최대 수에 대해 궁금했지만 레지스트리에서 이것을 변경해도 차이가없는 것 같습니다.

그래서 질문은; 갑자기 처리량을 5 배로 증가시키는 피들러를 실행하는 것은 무엇이며 다른 도구를 시작하지 않고도 기계에서 어떻게이를 달성 할 수 있습니까?

감사!

도움이 되었습니까?

해결책

app.config :에서 최대 연결을 설정하여 이제 처리량을 바로 올릴 수있는 것 같습니다 (실제로 피들러가 실제로 열린 상태에서 두 배로).

<system.net>
  <connectionManagement>
    <add address="*" maxconnection="30" />
  </connectionManagement>
</system.net>

결과에 매우 만족하지만 Fiddler Open을 사용하는 것이 왜 결과를 극적으로 바꾸 었는지에 대해 여전히 약간의 신비화되었습니다.

다른 팁

내가 알아 차린 한 가지는 블록을 사용하여 구현하지 않는다는 것입니다. 이는 요청 수를 곱할 수있는 임의성 계수를 추가하므로 다음을 해결하는 것이 좋습니다.

var req = WebRequest.Create(url);
using (WebResponse resp = req.GetResponse())
{
    using (Stream s = resp.GetResponseStream())
    {
        using (var sr = new StreamReader(s, Encoding.ASCII))
        {
            return sr.ReadToEnd();
        }
    }
}

다음으로, FYI, 피들러는 대리 역할을합니다. 기본 프록시가 스크립트를 사용하여 프록시 구성을 설정하도록 설정된 경우 Fiddler를 실행하는 것이 스크립트 설정을 수행하는 데 필요한 시간을 제거하지 않을 수 있는지 궁금합니다. 각 요청이 아닌 한 번만 발생할 수 있습니다.

나는 당신과 비슷한 문제가 있었고 나의 결의안을 공유하고 싶었습니다.

요컨대, 나는 HTTP 요청을하고있는 콘솔 프로그램을 가지고 있었고 15 분 정도 시간 후에 타임 아웃을 할 것입니다. 그러나 Fiddler를 사용했다면 며칠 동안 실행 한 후에도 타임 아웃을 경험 한 적이 없습니다.

App.Config에서 MaxConnections 속성을 설정하려고 시도했지만 전혀 도움이되지 않은 것 같습니다. 그런 다음 httpwebrequest, httpwebresponse 및 스트림 객체에 대한 모든 참조 및 블록을 사용하여 이러한 객체에 대한 데이터를 읽고 쓰는 데 사용되었습니다.

저것 보인다 트릭을 수행했습니다. 나는 타임 아웃과 피들러 달리기없이 거의 24 시간 동안 달리고 있습니다.

쿼리의 방식은 각 통화에 대한 새 세션을 생성하게됩니다. 오버 헤드 인 Fiddler는 쿼리에 세션을 추가 할 수 있습니다 ....

노력하다

개인 정적 CookieContainer _cookiecieContainer = New CookieContainer ();

_httpwebrequest.cookiecontainer = _cookiecontainer; // CookieContainer를 재활용하여

우리는 같은 문제가 있었고, 당신의 httpwebrequest.preauthenticate를 true로 설정했습니다.

더 이상 401 응답이 없어야하므로 연결이 적을 수 있습니다 ...

나는 같은 문제가 있었다. 나는 이것을 다운로드했다 :http://www.wowinterface.com/downloads/info13581-reatrixlatencyfix.htmlHTTPWebrequest의 성능이있었습니다. 그것은 tcpackfrequency를 수정하고 모든 것을 완전히 엉망으로 만듭니다. 나는 그것을 제거했고 이제는 작동합니다.

나를 위해, 나는 설정하고 있었다 request.ProtocolVersion = HttpVersion.Version10;

이에 대한 기본 설정은 httpversion.version11입니다. 이것을 기본값으로 다시 설정하면 피들러없이 요청이 훨씬 빨라졌습니다.

나는 이것이 다른 사람을 도울 수 있기를 바랍니다. 아침 내내 이것을 알아내는 데 걸렸습니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top