誰も私に答えることができますか、コードの下に来ると、C2D 2.6GHz CPU のコア全体がどのように消費されるのでしょうか? 10MB のチャンクでファイルをダウンロードするだけで、600 個ほどになる可能性がありますが、NSOperationQueue には 6 つの同時タスクの制限があります。
なぜ同じアプリが Windows にあるのか (C# で書かれたものは 80% ではなく 2% しか消費しない!)、それは単純な HTTP 要求です!
for (DownloadFile *downloadFile in [download filesInTheDownload])
            {
                for (DownloadChunk *downloadChunk in [downloadFile chunksInTheFile])
                {
                    NSString *downloadPath = [[NSString stringWithFormat:@"%@/%@", [download downloadFolder], [download escapedTitle]] stringByExpandingTildeInPath];
                    NSString *chunkPath = [downloadPath stringByAppendingFormat:@"/%@.%i", [downloadFile fileName], [downloadChunk chunkId]];
                    NSError *attributesError = nil;
                    NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:chunkPath error:&attributesError];
                    NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
                    uint64_t fileSize = [fileSizeNumber longLongValue];
                    NSLog(@"Chunk file size: %lli", fileSize);
                    uint64_t expectedSize = ([downloadChunk endingByte] - [downloadChunk startingByte]) + 1;
                    NSLog(@"Chunk expected size: %lli", expectedSize);
                    uint64_t newStartingByte = [downloadChunk startingByte] + fileSize;
                    if (fileSize == expectedSize)
                    {
                        NSLog(@"Chunk complete: %@.%i", [downloadFile fileName], [downloadChunk chunkId]);
                    }
                    else
                    {
                        NSURL *fileURL = [[NSURL alloc] initWithString:[downloadFile filePath]];
                        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:fileURL];
                        NSLog(@"Normal range: %lli-%lli", [downloadChunk startingByte], [downloadChunk endingByte]);
                        NSString *range = [NSString stringWithFormat:@"bytes=%lli-%lli", newStartingByte, [downloadChunk endingByte]];
                        [request setValue:range forHTTPHeaderField:@"Range"];
                        AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
                        operation.outputStream = [NSOutputStream outputStreamToFileAtPath:chunkPath append:YES];
                        [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
                            NSLog(@"%@", [NSString stringWithFormat:@"Chunk complete: %@.%i", [downloadFile fileName], [downloadChunk chunkId]]);
                            if (download.downloadedBytes == download.size)
                                [[NSNotificationCenter defaultCenter] postNotificationName:@"downloadFinished" object:download];
                        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                            NSLog(@"Error: %@", error);
                        }];
                        [operation setDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
                            download.downloadedBytes += bytesRead;
                        }];
                        [queue addOperation:operation];
                    }
                }
            }
ここにいくつかの時間プロファイラーのスクリーンショットがあります。正しく読むと、すべてが RunLoops のようです。
