我想通过NSOperationQueue
将300张图片上传到服务器。我必须使用
每个图片都有一个网址,因此我将使用300个网址。换句话说,这些网址需要300 NSOperation
s才能进入NSOperationQueue
。
这是正确的方法吗?它是否会影响主线程中的应用程序性能?
答案 0 :(得分:3)
如果你想并行运行300次上传,那么无论平台如何,这都是一个不错的主意。
答案 1 :(得分:3)
主线程中的性能不会受到影响,因为无论线程数多少,主线程都不会花费太多时间。但问题是,并行运行的大量线程之间的上下文切换过多会给它们执行的时间少得多。永远不要让线程数量与这么大的数量并行运行。我建议一次不超过5个线程。
与在线程中运行上传过程相关的另一个优点(但仅在单个线程中)如果上传过程在上传过程中停止,则可以说在上传50张图片之后,至少您将拥有这50张图片。如果您在线程中执行此操作,则可能在完成一半上传后,您可能没有完全上传的图像。
答案 2 :(得分:0)
可以将300个NSOperations推送到NSoperationQueue。 NSoperationQueue不会同时运行所有这些 - 它将限制当前正在运行的操作的数量。您还可以使用
手动设置并发操作的数量- (void)setMaxConcurrentOperationCount:(NSInteger)count
设置接收方可以进行的最大并发操作数 执行。指定的值仅影响接收器和 队列中的操作。其他操作队列对象也可以 并行执行最大数量的操作。减少 并发操作数不会影响任何操作 目前正在执行。如果指定值 NSOperationQueueDefaultMaxConcurrentOperationCount(即 推荐),最大操作次数可以动态改变 根据系统条件。
更新:
设置'MaxConcurrentOperationCount'可以设置上限。但系统决定自己同时运行多少次下载。因此,即使你将MaxConcurrentOperationCount设置为300,实际上系统也会同时运行1-10次操作。
系统不知道操作是做什么的。 AFAIK它仅分析CPU和内存使用情况,以确定同时运行的操作数。因此,即使您的连接不好,它也可以同时运行10个操作 - 这不是一个好主意。在这种情况下,如果您的操作使用网络,最好将MaxConcurrentOperationCount设置为1-2(GPRS / EDGE连接)和5-10(WiFi)。