문제

웹 사이트에 연결하고 XML을 다운로드하는 프로그램을 만들고 있습니다. 그런 다음 정보를 사용자에게 표시합니다.

내가 가진 문제는 프로그램을 처음 열고 XML 정보를 다운로드하기 시작할 때 정말 오랜 시간이 걸립니다. 프로그램이 여전히 열려있는 사이트에서 다른 페이지를로드하면 다운로드하는 데 약 0.5 초가 걸립니다. 이것을 피할 방법이 있는지 궁금합니다.

나는 현재 HTTPWebRequest를 사용하여 스트림을 다운로드하고 스트림 리더를 읽고 읽습니다. 그런 다음 Xlinq를 사용하여 XML을 구문 분석하고 구문 분석합니다.

도움이 되었습니까?

해결책

프록시를 명시 적으로 설정해보십시오. 프록시가 정의되어 있지 않은 경우 HttpRequest 수업은 하나를 찾는 데 시간을 소비합니다. 일단 그것을 찾았거나 찾지 못한 후에는 해당 정보를 응용 프로그램 수명에 사용하여 후속 요청 속도를 높이게됩니다.

//internally sets "ProxySet" to true, so won't search for a proxy
request.Proxy = null;

.config에서 이것을 정의 할 수도 있습니다.

<system.net>
  <defaultProxy
    enabled="false"
    useDefaultCredentials="false" >
    <proxy/>
    <bypasslist/>
    <module/>
  </defaultProxy>
</system.net>

다른 팁

처음 지연은 다음의 조합으로 인한 것일 수 있습니다.

  1. 서버 DNS 항목을 해결할 시간입니다
  2. 프록시 AutoConfig 스크립트를 다운로드하고 컴파일하고 실행하여 유효 프록시를 결정할 시간
  3. 앱에서 프록시 서버로의 네트워크 대기 시간 (환경에 프록시 서버가있는 경우)
  4. 프록시 서버에서 실제 대상 서버로의 네트워크 대기 시간.
  5. 서버의 대기 시간은 XML 문서를 제공합니다. 메모리 내 객체 표현을 가로 지르고 XML 문서를 생성 해야하는 경우 시간이 걸릴 수 있습니다. 또한 XML-Serialization과 같은 기술을 사용하여 문서를 생성하는 경우 직렬 라이저가 구성되는 방식에 따라 중간 어셈블리를 생성해야한다는 사실 때문에 직렬화/사형화를위한 첫 번째 호출은 항상 오랜 시간이 걸립니다. 그리고 편집.
  6. XML 문서 구조가 매우 복잡한 경우 클라이언트 측에서 XML을 구문 분석하는 데 시간이 걸릴 수 있습니다.
  7. XMLSerializer와 같은 XlinQ가 XML 구문 분석 및 쿼리에 대한 임시 어셈블리를 생성하면 첫 번째 요청은 후속 요청보다 시간이 더 걸립니다.

시간이 걸리는 부분을 파악하려면 System.diagnostics.stopWatch ()를 사용하여 코드에 로그인하는 시간을 삽입하십시오.

// this is the time to get the XML doc from the server, including the time to resolve DNS, get proxy etc.
System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
timer.Start();
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
timer.Stop();
Console.WriteLine("XML download took: " + timer.ElapsedMilliseconds);

timer.Start();
// now, do your XLinq stuff here...
timer.Stop();
Console.WriteLine("XLinq took: " + timer.ElapsedMilliseconds);

이 주위에 루프를 삽입하고 첫 번째 요청과 후속 요청 사이의 다양한 구성 요소의 차이점이 무엇인지 확인할 수 있습니다.

차이가 쿼리가 아닌 다운로드에 있다는 것을 알게되면 네트워크 스니핑을 사용하여 더 조사 할 수 있습니다. Wireshark.

도움이 되었기를 바랍니다.

첫 번째 패스에서 요청의 어떤 부분이 더 오래 걸리는지 알아 내기 위해 더 많은 연구를해야 할 것입니다. 첫 번째 본능은 DNS가 지정한 도메인 이름에 대한 IP 주소를 가져 오라고 요청하는 것이 처음 실행될 때 캐시되지 않기 때문에 더 오래 걸린다고 말합니다. 다른 쪽 끝에있는 웹 서버 일 수도있는 웹 서버 일 수도 있고 처음에는 쿼리 할 때 일부 시작 스크립트를 실행해야 할 수도 있습니다. 첫 번째 요청은 시간이 오래 걸린다고 언급했지만 얼마나 오래 걸리지 않습니다. 이것이 첫 번째 요청을 수행하는 데 너무 오래 걸리는 큰 문제를 일으키고 있습니까? 아니면 성가신 일입니까?

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