HttpWebResponse 클래스 +에서는 StreamReader 매우 느린 HttpWebResponse.GetResponse()와 Streamreader.ReadToEnd는(), 또한 StreamReader.Read를 사용하여 시도하여() 내 HTML 문자열을 작성하는 루프.내가 (단지 몇 백 개 사이트) C#에서 제한된 웹 크롤러를 구현하기 위해 노력하고있어
약 5-10K 페이지 만 다운로드 중입니다.
모두 매우 느립니다! 예를 들어 평균 GetResponse() 시간은 약 0.5 초이며 평균 StreamREader.ReadToEnd() 시간은 약 5 초입니다!
모든 사이트는 내 위치와 매우 흡사하며 빠른 서버를 사용해야하므로 매우 빠릅니다. (익스플로러에서 D/L을 거의 사용하지 않습니다.) 프록시를 사용하고 있지 않습니다.
내 크롤러는 동일한 사이트에서 동시에 약 20 개의 스레드를 읽습니다. 이것이 문제의 원인이 될 수 있습니까?
어떻게 StreamReader.ReadToEnd 번을 줄일 수 있습니까?
웹 클라이언트를 사용하여 시도, 동일한 결과 (평균 시간이 변경되지 않은 경우). 평균 1.5KBPS 연결에 180KBPS의 평균 d/l 속도가 있음을 언급해야합니다. 저는 StreamReader.Read를 동시에 호출하는 20 개의 스레드가 그와 관련이 있다고 생각 했습니까? 아니면 이건 부적절한가요? – Roey
내 경험에 비추어 볼 때, 3-4 스레드로 대역폭을 포화시킬 수있는 연결이 필요합니다. ping을 수행하는 웹 사이트가 실제로 느리고 I/O를 기다리는 스레드가 많지 않으면 더 이상 실행할 필요가 없습니다. – kgriffs
와우 !!! 비동기 HttpWebRequest를 사용하여 클라이언트 당 약 300 개의 스레드로 테스트 서버를로드하고 각 스레드는 "순차적으로"다운로드했습니다. maxconnection 설정을 변경하면 각 스레드가 데이터를 10 배 빠르게 다운로드 할 수 있습니다. –