在多任务模式下向服务器发送超过 200 张图像?

问题描述 投票:0回答:3

我想通过

NSOperationQueue
上传300张图片到服务器。我必须使用 每个图像都有一个 URL,因此我将使用 300 个 URL。换句话说就是300

ios image nsoperationqueue
3个回答
3
投票

如果您想并行运行 300 个上传,那么无论平台如何,这都是一个坏主意。


3
投票

主线程中的性能不会受到影响,因为无论有多少线程,主线程都不会占用太多时间。但问题是,大量并行运行的线程之间的上下文切换过多,会导致线程的执行时间大大减少。永远不要让并行运行的线程数量达到如此巨大的数量。我建议一次不要超过 5 个线程。

在线程中(但仅在单个线程中)运行上传过程的另一个优点是,如果上传过程在上传过程中停止,假设上传了 50 张图像后,那么至少您将拥有这 50 张图像。如果你在线程中完成这一切,那么即使上传完成一半,你也可能没有完整上传图像。


0
投票

将 300 个 NSOperations 推送到 NSOperationQueue 就可以了。 NSoperationQueue 不会同时运行所有操作 - 它将限制当前正在运行的操作的数量。您还可以使用

手动设置并发操作数
- (void)setMaxConcurrentOperationCount:(NSInteger)count

设置接收方可以并发操作的最大数量 执行。指定的值仅影响接收器和 其队列中的操作。其他操作队列对象也可以 并行执行最大数量的操作。减少 并发操作的数量不会影响任何操作 目前正在执行中。如果您指定该值 NSOperationQueueDefaultMaxConcurrentOperationCount(即 推荐),最大操作数可以动态变化 根据系统条件。

更新:

设置“MaxConcurrentOperationCount”即可设置上限。但系统会自行决定同时运行多少个下载。因此,即使您将 MaxConcurrentOperationCount 设置为 300,实际上系统通常也会同时运行 1-10 个操作。

系统不知道操作做了什么。据我所知,它仅分析 CPU 和内存使用情况来确定有多少操作同时运行。因此,即使您的连接很差,它也可以同时运行 10 个操作 - 这不是一个好主意。在这种情况下,如果您的操作使用网络,最好将 GPRS/EDGE 连接的 MaxConcurrentOperationCount 设置为 1-2,将 WiFi 设置为 5-10。

© www.soinside.com 2019 - 2024. All rights reserved.