我的应用需要在发布时下载一些数据(约50k)。我目前正在评估几种情况下的下载速度,特别是连接速度慢。
我有一些简单的测试代码如下所示。一个按钮开始下载文件并开始测量,测量结束时是下载完成(所有这些都在主线程btw中运行)。
第一次按下按钮时,下载的时间比按顺序按下按钮的时间长(比如2s后)。如果我等待10秒再按一次,时间会再次变长。
这是为什么?是否需要花费很多时间才能进行初始连接?我知道下面的代码非常原始。什么是更快地获得连接的最佳方式。
编辑:我假设这肯定与ISP /电话公司处理互联网连接的方式有关。可能是这样,当我不主动使用网络时,我的ISP的互联网连接被剥离到一定的最小值?然后,当我下载某些内容时,会添加更多“频道”以提高速度? 我检查了几张SIM卡:数据速率越贵,行为越一致。比方说,如果我使用品牌A SIM,如果有上述行为,如果我使用品牌B(优质),一切都很好。
非常感谢提前
NSURL *url = [NSURL URLWithString:@"http://myServer/testFeed1.zip"];
NSData *urlData = [NSData dataWithContentsOfURL:url];
...保存文件
答案 0 :(得分:1)
感谢您的输入,但这种行为绝对来自ISP的速度限制(当然是移动连接)。即使连接“看起来”很好(3G标志和良好接收),看到不同SIM卡之间的差异有多大也是很有趣的。 我确实使用了未缓存的方法,但它没有改变。
答案 1 :(得分:0)
也许是缓存..您可以使用此链接来验证:myServer / testFeed1.zip?<随机数>
答案 2 :(得分:0)
我不确定,但我认为dataWithContentsOfURL:
实现了某种缓存。因此,您测量的时间越长,实际下载时间就越长。您可以查看是否尝试过以下操作:
NSError* error = nil;
NSData* data = [NSData dataWithContentsOfURL:yourURL options:NSDataReadingUncached error:&error];
如果缓存是原因,下载现在应该总是需要更长时间。 (我发现代码段here。)
<强>更新强> 如果下载时间是个问题,您应该考虑使用NSURLConnection进行异步下载。它将极大地改善用户体验。此外,您可以单独测量连接和下载时间。 Here's a simple example关于如何做到这一点。