我有一个iOS应用程序,可以在启动时同步一定数量的资产。我正在使用AFNetworking并设置NSOperationQueue来处理所有下载。我想知道,有多少同时下载是有意义的。如果我必须同时使用多个网络,那么网络性能会下降吗?目前我一次最多下载5次。
答案 0 :(得分:4)
这取决于几个因素:
对于中小型应用程序,限制因素通常是设备的网络延迟,但在您的情况下可能不是这种情况。最后,您必须测试并找出最有效的折衷方案。 5是一个很好的数字开头。 您可能希望通过可用的网络连接(WLAN或3G甚至更慢......)设置并发下载的数量。
答案 1 :(得分:4)
使用NSOperationQueues的美妙之处在于它们与底层操作系统(iOS或OSX)密切相关。队列根据许多因素决定运行多少操作,包括可用内存,系统负载等。
你不应该试着再次猜测系统并限制自己。排队尽可能多的操作并让操作系统处理它。我有一个iPhone应用程序,当它必须获取不同大小的图像等时,会在队列中添加数百个操作。工作得很好,UI没有被阻止等等。
编辑:嗯,似乎在进行NSURLConnections和类似的网络连接时,NSOperationQueue并没有真正关键到网络使用。今年夏天我在苹果内部论坛上问过,最后Quinn“The Eskimo”(Apple网络大师)告诉他使用类似4的限制。所以这篇文章在纯处理能力方面是正确的 - NSOperationQueue会做正确的事情 - 但是当谈到网络操作时,你需要设置一个限制。答案 2 :(得分:2)
主要取决于你的硬件我会说。解决这个问题的最佳方法是使用多个试验对多个案例进行测试。尝试尽可能多样化您测试的硬件(请记住不要使用模拟器来测试它!)。
实际上有constant the SDK provides根据各种约束而变化。我建议你考虑使用它。
答案 3 :(得分:1)
关于这个问题,我已经在Ipad2 IOS6.0上做了一些测试。我创建了一个小应用程序,它对Web服务器执行HTTP-GET请求。这个网络服务器将提供60秒的数据(这是为了获得有意义的结果,将在我的测试中将其更改为10分钟)。
对于一个HTTP-GET请求,它工作得非常好。然后我尝试同时执行多个HTTP请求,看看我可以通过IPad的WIFI连接下载多少和多快的速度
我制作了两个版本。 1个版本使用NSOperations,1个版本使用NSThread和Synchron HTTP-GET请求。简而言之,我总是为我的第6个请求获得TimeOut。 (tcp-syn无法访问我的HTTP服务器。)
NSThead-implementation:
只需创建一个for循环并创建一个Thread。这将执行同步的HTTP请求。
我观察到我的第6次请求在20秒后超时。如果我将Timeout设置为80秒,我清楚地看到在我的第一个http请求结束后(60秒后)我的第6个请求被启动...
的NSOperation的实现:
创建队列并将maxConcurrentOperations设置为12.将12个http请求操作添加到队列。在这里我也注意到第6个请求得到-1001错误代码(意思是:timout)。我看不到第6个请求的tcp-syn。