Mon application ayant environ 10 à 30 webservices (tous les deux get/post) .j'ai précédemment utilisé Async NSURLconnection. qui prend environ 5 secondes pour exécuter tous les services. Mais maintenant j'ai remplacé NSurlsession qui obtient un délai de réponse comparer à nsurlconnection, il est retardé de 4 à 6 fois. Ici, j'ai joint l'un des codes de la méthode webservice pour référence. comme ci-dessous j'ai le code pour toutes les méthodes.NSURLSession Problème de performance d'implémentation
Code Exemple NSURLsession
#pragma mark - NSURLSession
- (NSURLSession *)createSession
{
NSLog(@"DSCReturnAPI: %s",__func__);
static NSURLSession *session = nil;
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfig.timeoutIntervalForRequest = WEBSERVICE_TIMEOUT;
session = [NSURLSession sessionWithConfiguration:sessionConfig
delegate:self
delegateQueue:[NSOperationQueue mainQueue]];
return session;
}
#pragma mark - API Callbacks
-(void)getMyData{
@try {
_webServieRequestType = HWDSCReturnGetRequestType;
NSString *countrycode = [BusinessManager sharedInstance].countryCode;//[HWUserDefaults countryCode];
NSString *userid = [BusinessManager sharedInstance].userId;// [HWUserDefaults userId];
NSString *accessToken = [BusinessManager sharedInstance].accessToken;//[HWUserDefaults accessToken];
NSString *deviceId = [HWUserDefaults deviceId];
[HelperCallbacks logText:[NSString stringWithFormat:@"AccessToken %@",accessToken]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:API_DSCRETURN(countrycode,userid)]];
[request setHTTPMethod:@"GET"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:accessToken forHTTPHeaderField:@"Authorization"];
[request setValue:deviceId forHTTPHeaderField:@"deviceId"];
[request setValue:@"ba598025146eff37e26c9150b180a78b" forHTTPHeaderField:@"If-None-Match"];
theSession = [self createSession];
theDataTask = [theSession dataTaskWithRequest:request];
[theDataTask resume];
}
@catch (NSException *exception) {
[ExceptionHandler sendException:exception];
}
}
#pragma mark - NSURLSessionDataDelegate
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveData:(NSData *)data {
NSLog(@"DSCReturnAPI: %s",__func__);
// NSArray *dataArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
if (theSession == session) {
if (_receivedData == nil) {
_receivedData = [[NSMutableData alloc] initWithData:data];
} else {
[_receivedData appendData:data];
}
}
else
{
//NSLog(@"");
}
}
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler {
NSLog(@"DSCReturnAPI: %s",__func__);
if (theSession == session) {
[BusinessManager sharedInstance].urlResponseRecieved = NO;
NSLog(@"DSCReturnAPI: httpResponse:%@",response);
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
httpStatusCode =(int) [httpResponse statusCode]; // To track response Code:
NSLog(@"DSCReturnAPI : Http code:%d",httpStatusCode);
NSLog(@"DSCReturnAPI : Headers %@",[httpResponse allHeaderFields]);
_receivedData = [[NSMutableData alloc]init]; }
completionHandler(NSURLSessionResponseAllow);
}
#pragma mark - NSURLSessionTaskDelegate
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{
NSLog(@"DSCReturnAPI: %s",__func__);
NSLog(@"DSCReturnAPI: didFailWithError :error : %@ errorCode: %ld",error.description,(long)error.code);
@try {
if ([self.serviceDelegate conformsToProtocol:@protocol(ServiceMgrProtocol)] && [self.serviceDelegate respondsToSelector:@selector(webServiceDidFailDSCReturnWithError:)]&& error.code != 0) {
[self.serviceDelegate webServiceDidFailDSCReturnWithError:error.localizedDescription];
}
else {
NSLog(@"DSCReturnAPI:SUCCESS");
[self processResponse];
}
}
@catch (NSException *exception) {
[ExceptionHandler sendException:exception];
}
@finally {
if (theSession) {
theSession = nil;
}
_receivedData = nil;
} }
Salut J'ai essayé aussi qui retardent également en réponse –
Ensuite, cela doit être un peu de nettoyage en place nécessaire d'un côté du serveur, essayez de vider le cache et l'augmentation de la mémoire du serveur. Parce que NSURLSession est seulement un dans Cocoa Touch morden qui donne une réponse très rapide et fiable plus que AFNetWorking :) –
J'ai vérifié avec le serveur ppl, ils sont sûrs de cache et ils n'ont pas de cache là-bas. donc simplement redémarré mais pas de changement –