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

额外的事情要考虑:缓存图片