我有一个网络刮刀,用于从wp7中的不同来源抓取新闻。 我目前的做法是:
整个事情是异步发生的...意味着一旦获取报纸的一部分网址,它就会被添加到队列中,第二阶段包括获取标题,图像等等...即使对于一篇文章,也会显示此内容。稍后,随着更多文章被提取,它们将被添加到列表中。
为了获取目的,我使用SmartThreadPool(http://www.codeproject.com/Articles/7933/Smart-Thread-Pool)用于Windows Phone。
我的问题是......即使从9个出版物中获取大约80个项目(总共),也需要超过一分钟。 我怎样才能加快手术速度?
注意:我有一个两阶段的方法,因为很多时候图像都没有头条新闻,只能在文章中找到。
答案 0 :(得分:2)
制作80个网络请求并获得80个响应需要花费一分多钟时间并不奇怪。即使在有线连接上,请求和响应之间通常至少需要500毫秒。根据服务器和连接的不同,请求和响应之间的整秒延迟并非不合理。这并不计算下载内容所需的时间。
你的3 Mbps链路是每秒三兆*位*,或者每秒小于400千字节的东西,并且将与使用相同塔或连接点的其他人共享。
我不熟悉SmartThreadPool,我不知道你是如何使用它的。但是,它可能会限制并发线程的数量,并且每个请求都使用一个线程。因此,如果它将您限制为4个并发线程,那么您可以做的最好的可能是每秒4次下载。
如果您使用一个发出多个异步Web请求的线程,则可以有15个(可能更多)并发请求。由于花在Web请求上的大部分时间都花在等待服务器的响应上,因此与其他方法相比,这将使您的性能大幅提升。假设你下载的新闻文章不是那么大,你的限制因素是带宽。
根据您的描述,我要说您不需要执行任何显式多线程。只需使用异步Web请求。
当然,所有这些都是猜测,因为您没有显示任何代码或提供了详细描述的方式。但是,如果我要写一个像你描述的新闻报道,这就是我采取的方法。
答案 1 :(得分:0)
(对于这样的问题,https://softwareengineering.stackexchange.com/不是更好的家吗?)
需要考虑的事项:
图像需要时间加载,即使在3G或4G手机上,也可以跳过或推迟加载!
看一下NextGen reader在WP8上的表现(也适用于Win8):
在我看来,你应该让你的应用程序工作得足够快,但它不一定非常完美(特别是图像部分),随着时间的推移,人们很快就会明白,如果缺少图像但这些网站并不是你的应用程序的错(顺便说一句,这是真的)。
您可以查看桌面应用。与Fiddly一起看看它到底发生了什么。
我的WP8每天都在使用这个阅读器好几个月,我对这种行为感到满意,我知道对于丢失的图像(更确切地说,在某些网站上)我要么必须浏览网站本身,要么就是忘记关于它,我不会责怪申请。
现在我遇到了类似的问题,问了一个问题,最后我回答说:
我需要从许多不同的来源加载许多图像,它必须很快。最阻塞的问题是超时,因为他们很长/很烦人等待。我最终跳过了缓慢的图像加载,我很高兴,虽然其中一些不可见:
还有一些图片不可用,但在感知上它并不像内容在这里那么重要:文本和原始网站的链接。你总是可以尝试在后台再次加载。
我发布的代码足以满足我的需求,如果图片需要超过3秒,那么我就跳过它。我可以稍后再尝试加载它,但我的应用程序中最重要的部分是:响应性。除此之外,我还并行下载了一些内容,我邀请您查看下面发布的答案:
Asynchronously and parallelly downloading files
需要考虑的额外事项:缓存图片