0

私は最近 ASINetworkQueue を試していましたが、その過程で非常に奇妙な問題に遭遇しました。

サーバーから 30MB 程度のサイズの zip をダウンロードしようとしましたが、単純な ASIHttpRequest を使用してダウンロードすると、わずか 2 分でファイルがダウンロードされましたが、そのリクエストを ASINetworkQueue に入れようとすると、ダウンロード時間が驚くほど長くなり、最大で 5 分、それはとても奇妙でした..誰かが何か間違っていると言うことができるなら、私はコードスニペットを入れています..

[self setNetworkQueue:[ASINetworkQueue queue]];
[[self networkQueue] setDelegate:self];
[[self networkQueue] setShouldCancelAllRequestsOnFailure:NO];
[[self networkQueue] setMaxConcurrentOperationCount:1];
[[self networkQueue] setShowAccurateProgress:YES];

if (!progressBar)
{
    progressBar = [[UIProgressView alloc] init];
}
[[self networkQueue] setDownloadProgressDelegate:progressBar];
[[self networkQueue] setRequestDidFinishSelector:@selector(requestFinished:)];
[[self networkQueue] setRequestDidFailSelector:@selector(requestFailed:)];
[[self networkQueue] setQueueDidFinishSelector:@selector(queueFinished:)];

NSArray *arrFilenames = [[NSArray alloc] initWithObjects:@"Audio", nil];

for (NSString *strFilename in arrFilenames)
{

    NSString *strDestFolderName = @"Destination Path";


    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:  [NSString stringWithFormat:@"%@.zip", strDestFolderName]];

    if(!fileExists)
    {
        NSURL *url = <File Url to be downloaded>;

        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

        // This file has part of the download in it already
        [request setTemporaryFileDownloadPath:[NSString stringWithFormat:@"%@.zip.download", strDestFolderName]];
        [request setAllowResumeForFileDownloads:YES];
        [request setDownloadDestinationPath:[NSString stringWithFormat:@"%@.zip", strDestFolderName]];

        [request setTimeOutSeconds:30];
        [request setShouldContinueWhenAppEntersBackground:YES];
        [request setNumberOfTimesToRetryOnTimeout:2];
        request.userInfo = [NSDictionary dictionaryWithObjectsAndKeys: strFilename, @"fileName", nil];

        [[self networkQueue] addOperation:request];


    }

}




[[self networkQueue] go];

上記のコードを使用すると、Audio.zip のダウンロードに約 5 分かかります。しかし、次のコードを実行すると 2 分かかります。

NSArray *arrFilenames = [[NSArray alloc] initWithObjects:@"Audio", nil];

for (NSString *strFilename in arrFilenames)
{

    NSString *strDestFolderName = @"Destination Path";


    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:  [NSString stringWithFormat:@"%@.zip", strDestFolderName]];

    if(!fileExists)
    {
        NSURL *url = <File Url to be downloaded>;

        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

        // This file has part of the download in it already
        [request setTemporaryFileDownloadPath:[NSString stringWithFormat:@"%@.zip.download", strDestFolderName]];
        [request setAllowResumeForFileDownloads:YES];
        [request setDownloadDestinationPath:[NSString stringWithFormat:@"%@.zip", strDestFolderName]];

        [request setTimeOutSeconds:30];
        [request setShouldContinueWhenAppEntersBackground:YES];
        [request setNumberOfTimesToRetryOnTimeout:2];
        request.userInfo = [NSDictionary dictionaryWithObjectsAndKeys: strFilename, @"fileName", nil];

        [request setDidFinishSelector:@selector(requestFinished:)];
        [request setDidFailSelector:@selector(requestFailed:)];
        [request setDownloadProgressDelegate:progressBar];

        [request start];


    }

}

注 - 複数ではなく 1 つのファイルのみでテストしていましたが、私の目的は複数のファイルをダウンロードすることです..

ありがとう。

4

0 に答える 0