2

나는 wp7에서 다른 출처의 뉴스를 스크랩하기위한 웹 스크레이퍼를 가지고 있습니다. 내 일은 다음과 같습니다 :뉴스 가져 오기 최적화

  • xml 파일의 신문 정보를로드하십시오.
  • 지정된 섹션으로 이동하여 뉴스 항목의 URL을 가져옵니다.
  • 각 URL로 이동하여 헤드 라인, 이미지, 게시자를 가져옵니다.
  • Windows phone의 MVVM 아키텍처를 사용하는 디스플레이.

모든 것이 비동기 적으로 발생합니다 ... 신문 섹션에서 URL을 가져 오면 대기열에 추가되고 제목을 가져 오는 두 번째 단계, 이미지 등이 시작됩니다. 한 기사에 대해서도 가져 오면 바로 표시됩니다. 나중에 더 많은 기사를 가져 오면 목록에 추가됩니다.

가져 오기 목적으로 나는 Windows Phone 용 SmartThreadPool (http://www.codeproject.com/Articles/7933/Smart-Thread-Pool)을 사용하고 있습니다.

내 문제는 ... 9 개의 발행물에서 약 80 개 항목 (전체)을 가져 오는 경우에도 1 분 이상 걸립니다. 어떻게 절차를 빠르게 할 수 있습니까?

참고 : 두 번 단계 접근 방식을 사용합니다. 이미지에 헤드 라인을 사용할 수없고 기사에서만 찾을 수 있기 때문입니다.

+2

무엇 당신의 ** 프로파일 ** 이것에 관해서? –

+1

아마도 휴대 전화의 네트워크 연결이 모든 데이터를 쿼리하는 데 걸리는 시간 일 것입니다. – Servy

+0

@Servy 내 연결은 꽤 합리적입니다 ... 3G 속도 (약 3 MBPS)가 있습니다. 어떻게이 속도로 속도를 높이나요? – aceBox

답변

2

80 회의 웹 요청을하고 80 개의 응답을 얻는 데 1 분 이상 소요된다는 것은 놀라운 일이 아닙니다. 일반적으로 유선 연결에서도 요청 및 응답간에 최소 500 밀리 초가 소요됩니다. 서버와 연결에 따라 요청과 응답 사이의 대기 시간이 1 초라도 비합리적인 것은 아닙니다. 그리고 그 내용을 다운로드하는 데 걸리는 시간을 계산하지 않습니다.

3Mbps 링크는 초당 3 메가 비트 * 또는 초당 400 킬로바이트 미만이며, 이는 동일한 타워 나 연결 지점을 사용하는 모든 사람들과 공유하게됩니다.

저는 SmartThreadPool에 익숙하지 않아 사용 방법을 모르겠습니다. 하지만 동시 스레드 수를 제한하고 요청 당 하나의 스레드를 사용하고있는 것 같습니다. 따라서 동시 스레드 수를 4 개로 제한하면 할 수있는 최선의 방법은 초당 4 다운로드입니다.

대신 여러 개의 비동기 웹 요청을하는 단일 스레드를 사용하는 경우 15 개의 (더 많은) 동시 요청을 가질 수 있습니다. 웹 요청을하는 데 소비되는 대부분의 시간은 서버의 응답을 기다리는 데 소비되므로 다른 방법보다 성능이 크게 향상됩니다. 다운로드중인 뉴스 기사가 너무 커서 귀하의 제한 요소가 대역폭이라고 가정하지 마십시오.

귀하의 설명에서, 명시 적으로 멀티 스레딩을 수행 할 필요가 없다고 말씀 드리고자합니다. 비동기 웹 요청 만 사용하십시오.

코드를 전혀 표시하지 않았거나 자세한 설명을 제공하지 않았기 때문에 모든 것이 추측입니다. 그러나 당신이 묘사하는 것처럼 뉴스 스크레이퍼를 쓰는다면 그것이 내가 취할 접근법입니다.

0

(https://softwareengineering.stackexchange.com/은 그러한 질문에 더 좋은 집이 아닐까요?)

고려할 사항 :

이미지를로드하는 데 시간이 걸립니다, 심지어 3G 또는 4G 폰에, 건너 뛰거나 자신의 부하를 연기!

은 (Win8에 대한도 가능) NextGen reader는 WP8에 어떻게하는지 살펴 보자

  • 이 기사의 발췌를 가져 그들을 거의 즉시 보여줍니다
  • 당신이 그것을로드하는 기사에 탭
  • (사진 포함)
  • 사진을로드하는 데 시간이 오래 걸리면 표시되지 않습니다. 보안상의 이유로 또는 사이트를 통해서만 링크를 통해 액세스 할 수있는 특정 사이트가 있다는 점에 유의하십시오.
  • 예 : many pictur에 대한 이유 전자의 크기/연결 속도 옆에로드하지 마십시오
  • 기사 제목을 탭하면 IE에서 링크가 열립니다. 사람들이 서핑을하거나 사용하지 않아서 더 이상 문제가되지 않습니다. 응용 프로그램

제 생각에는 응용 프로그램이 충분히 빠르게 작동해야하지만 완벽 할 필요는 없습니다 (특히 이미지 부분). 사람들이 이미지가 있으면 응용 프로그램의 잘못이 아니라는 것을 빨리 알게 될 것입니다. 누락되었지만 그 사이트는 사실입니다.

데스크톱 앱을 살펴볼 수 있습니다. 피들리와 정확히 무슨 일을하는지 알아봐야합니다.

저는이 WP8에서 몇 달 동안이 독자를 매일 사용해 왔습니다.이 동작에 만족합니다. 이미지가 누락 된 경우 (더 정확하게는 특정 웹 사이트에서) 나는 사이트 자체를 탐색하거나 그것을 잊어 버리고 그 신청서를 비난하지 않습니다. 이제


나는, 비슷한 문제 있었다 결국 나 자신을 대답하는 질문 질문 :

나는 많은 다른 소스로부터 많은 이미지를로드하는 데 필요한

, 그것은 빨리했다입니다. 대부분의 블로킹 문제는 시간이 너무 오래 걸리거나 기다리기가 어려웠 기 때문에 시간 제한이있었습니다. 나는 부진 이미지의로드를 건너 뛰는 결국 나는 그들 중 몇은 표시되지 않습니다하지만 그것에 대해 매우 기쁘게 생각합니다 :

enter image description here

사용할 수없는 몇 가지 더 많은 이미지가 있지만 지각이만큼 중요하지 내용은 여기에 있습니다 : 원본 웹 사이트로 연결되는 텍스트 및 링크. 그리고 언제든지 백그라운드에서 다시로드 할 수 있습니다.

내가 게시 한 코드로 내 필요를 충족시킬 수 있습니다. 사진이 3 초 이상 걸렸을 때 건너 뛴다면 그냥 건너 뜁니다. 나중에 다시로드 할 수는 있지만 신청서의 가장 중요한 부분은 응답 성입니다.

Asynchronously and parallelly downloading files

추가 상황이 고려 :이 외에도, 난 내가 아래에 게시 된 답변을 살펴보고 여러분을 초대하는 병렬로 물건을 다운로드 캐시 이미지

관련 문제