ios - 在 AFNetworking HTTP GET 中测量响应时间

标签 ios ios6 afnetworking nsoperationqueue

我正在尝试测量使用 AFNetworking 下载文件时每个 GET 请求所花费的时间。我在循环中重复下载文件。 我遇到的问题是,我测量总时间的方式给出的总时间比实际时间长得多。例如,对于 50 次下载,它给出了 72 秒,但实际上只用了大约 5 秒。我还怀疑 5 秒对于 50 次下载来说太短了(每个文件的下载大小为 581 kb)。

在这种情况下,我如何有效地测量时间?从发出请求到收到响应,我需要时间。

我下载文件的方法:

- (void) HTTPGetRequest
{    
    startTime = CACurrentMediaTime(); // Start measuring time

    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:http://myServer];
    NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET"
                                                            path:@"/download/Text581KB.txt"
                                                      parameters:nil];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];

    // Save downloaded file
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"Text581KB.txt"]];
    operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        double elapsedTime = (CACurrentMediaTime() - startTime); // Measuring time
        totalTime += elapsedTime; // Measuring total time HERE!
        [results setString:[NSString stringWithFormat: @"Current Transaction Time: %f sec\nTotal Time: %f sec", elapsedTime, totalTime]];
        [_resultLabel performSelectorOnMainThread:@selector(setText:) withObject:results waitUntilDone:NO];
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];

    [operation setDownloadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {  ((int)totalBytesExpectedToWrite));
        totalDownloadSize += totalBytesExpectedToWrite;
        [_DataTransferredLabel setText:[NSString stringWithFormat:@"Total Download Size: %@", [self getFileSize:totalDownloadSize/1024]]];
    }];

    [operation setCacheResponseBlock:^NSCachedURLResponse *(NSURLConnection *connection, NSCachedURLResponse *cachedResponse) {
        return nil;
    }];
    [operationQueue addOperation:operation];
}

我正在我的 viewDidLoad 中创建一个 NSOperationQueue:

operationQueue = [NSOperationQueue new];
[operationQueue setMaxConcurrentOperationCount:1]; // using this as I was suspecting downloads were happening in parallel & thus 50 downloads finishing in a few secs

我正在调用 HTTPGetRequest 方法,如下所示:

- (IBAction)startDownload:(UIButton *)sender {
    totalCount = [[_countText text] longLongValue]; // get # of times to download
    long currentCount = 1;
    completedCount = 0;
    totalTime = 0;
    totalDownloadSize = 0;
    while (currentCount <= totalCount)
    {
        [self HTTPGetRequest];
        [results setString:@""];
        currentCount++;

    }

最佳答案

关于ios - 在 AFNetworking HTTP GET 中测量响应时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16498244/

相关文章:

ios - 像键盘一样显示 UIPickerView,没有 UITextField

ios - UICollectionView 单元格和按钮

iphone - iOS - 将 block 传递给函数

objective-c - AFJSONRequestOperation 失败,因为 web 服务返回内容类型为 text/html 的 JSON

ios - RestKit 并作为 NSManagedObject 保存到 CoreData

ios - 不使用私有(private) API 获取电话 (GSM) 信号强度

ios - 如何去除文本框的黑色边框?

ios - 分发 iOS 应用程序时出错 ITMS-9000

ios - 在ios中的谷歌地图上添加多个图钉

ios - 无法使用 AFNetworking 2.0 使用 GET 方法获取响应