2

我有一個網絡刮板,用於在wp7中從不同來源獲取新聞。 我目前的做法是:優化新聞獲取

  • 從XML文件加載報紙信息。
  • 轉到指定的部分並獲取新聞項目的URL。
  • 轉到每個網址並獲取標題,圖片,發佈商。
  • 使用windows phone的MVVM架構顯示。

整個事情發生異步...意味着只要從一個報紙部分的URL被提取,它被添加到隊列中,第二階段包括獲取標題,圖像等開始......並且即使對於一篇文章,也會立即顯示它。隨着更多文章被提取,它們將被添加到列表中。

爲了獲取目的,我爲Windows Phone使用了SmartThreadPool(http://www.codeproject.com/Articles/7933/Smart-Thread-Pool)。

我的問題是...即使是從9種出版物中獲取大約80種(總計),也需要一分多鐘。 我怎樣才能加快程序?

注:我有兩個階段的方法,因爲很多時候圖像不可用於標題,只能在文章中找到。

+2

你的**探查**說這個? –

+1

也許這就是您的手機的網絡連接需要多長時間來查詢所有數據。 – Servy

+0

@Servy我的連接非常合理......已經有3G速度(約3 MBPS)。我如何以這些速度加速? – aceBox

回答

2

製作80個Web請求並獲得80個響應花費的時間不足爲奇。即使在有線連接上,通常在請求和響應之間至少需要500毫秒。根據服務器和連接的不同,請求和響應之間的延遲時間不會不合理。這並不包括下載內容所需的時間。

您的3 Mbps鏈接是每秒三兆*位*,或低於每秒400千字節的東西,這將與所有使用同一個塔或連接點的其他人共享。

我不熟悉SmartThreadPool,我不知道如何使用它。不過,它可能會限制併發線程的數量,並且每個請求使用一個線程。所以,如果它限制你4個併發線程,那麼你能做的最好的可能是每秒4次下載。

如果您使用單個線程發出多個異步Web請求,則可以有15個(可能更多)併發請求。由於大部分時間花費在製作網絡請求上花費在等待服務器的響應,所以與其他方法相比,這會使您的性能大幅提高。假設您下載的新聞文章不是很大,以至於您的限制因素是帶寬。

從你的描述中,我會說你不需要做任何明確的多線程。只需使用異步Web請求。

所有這一切都是猜測,當然,因爲你沒有顯示任何代碼或提供了很多的詳細說明。但如果我要寫一篇像你所描述的新聞報道,那就是我所採取的方法。

0

(會不會https://softwareengineering.stackexchange.com/成爲這樣的問題更好的家?)

需要考慮的事情:

圖像需要時間來加載,即使在3G或4G手機,跳過或推遲裝載!

看看NextGen reader是怎麼做的WP8(也可用於在Win8):

  • 它獲取的文章的摘錄,並將其顯示幾乎立即
  • 當你點擊就可以加載它的一篇文章其整體(附圖片)
  • 如果圖片需要加載很長時間,他們不會顯示,請注意,有些網站想要一個特定的引薦來源,無論是出於安全原因還是隻有通過他們的網站訪問他們的鏈接
  • 即:許多圖片的原因e不能在其大小/連接速度旁邊加載
  • 仍然在閱讀器上,當您點擊文章標題時,它會在IE中打開鏈接,我的意思是,這不再是您的問題,因爲人們正在衝浪而不是使用您的應用

在我看來,你應該讓你的應用程序運行足夠快,但它不會是完美的(特別是圖像的部分),隨着時間的推移人們會很快明白,這不是你的應用程序的故障,如果圖像是失蹤,但這些網站(這是真的順便說一下)。

你可以看看桌面應用程序。與Fiddly看看它究竟做了什麼。

我一直在我的WP8上每天都會用到這個閱讀器,我對這種行爲很滿意,我知道對於缺少圖片(更確切地說,在某些網站上),我要麼瀏覽網站本身,要麼只是瀏覽網站忘了它,我不會責怪那個應用程序。


現在我有一個類似的問題,問了一個問題,到底我回答自己:

我需要從許多不同的來源加載許多圖像,它必須要快。最阻礙的問題是暫停,因爲它們很長/很煩人等待。我最終跳過低迷圖片加載,我感到非常高興的,雖然他們幾個是不可見的:

enter image description here

有一些更多的圖像不可用的,但感覺上它不是一樣重要內容在這裏:文本和鏈接到原始網站。你總是可以嘗試在後臺再次加載。

我發佈的代碼足以滿足我的需求,如果圖片需要超過3秒鐘,那麼我只是跳過它。我可以嘗試稍後重新加載,但我的應用程序中最重要的部分是:響應性。除了這個,我並行下載東西,我請你看看我下面貼了答案:

Asynchronously and parallelly downloading files

額外的事情要考慮:緩存圖片