Ce cas My Test indique que l'utilisation de NSURLSession avec une connexion HTTP/2 pose un problème de mémoire.NSURLSession Fuite de mémoire HTTP/2
test1: iOS 9. HTTP/2 serveur
J'utilise NSURLSession pour télécharger le fichier de 10M à un serveur HTTP/2, si le fichier uploadé tout terminé est ok, mais si j'annule la tâche de téléchargement avant c'est terminé, le 10M ne sortira jamais.
test2: iOS 9. Je teste HTTPs1.1 serveur
le même code avec un serveur de fichiers https1.1, annuler la tâche de téléchargement ou non, tout est ok, la mémoire à la normale. (10M données sont publiées)
iOS test3 8. HTTP/2 serveur
Ce cas, tout est ok. (NSURLSession n'a pas la négociation de protocole HTTP/2)
Donc, même s'il y a quelque chose qui ne convient pas avec mon utilisation de NSURLSession, les performances de NSURLSession ne sont pas normales avec HTTP/2.
Outre problème de mémoire, lors de l'utilisation NSURLSession avec HTTP/2 pour télécharger le fichier de la taille du segment de progression est énorme (mai 2M « didSendBodyData » à un rappel)
J'ai aussi lu this page. SSL peut mettre en cache quelque chose, mais ne doit pas mettre en cache le fichier entier (lorsque j'annule la tâche ou la requête expire, la mémoire de taille de fichier 10M fuit)
N'importe qui Connaît ce qui cause le problème, pourrait m'aider. Merci.
Question mise à jour 0912: ajouter un projet de test lien
projet de test: https://github.com/upyun/swift-sdk/tree/testleak
file:UPUtils.swift
//Change the url to make comparison test.
//let DEFAULT_UPYUN_FORM_API_DOMAIN = "http://v0.api.upyun.com"//http1.1
//let DEFAULT_UPYUN_FORM_API_DOMAIN = "https://httpbin.org/post" //https1.1
let DEFAULT_UPYUN_FORM_API_DOMAIN = "https://v0.api.upyun.com"//http2
votre code postal. – Segev
A ajouté un lien vers un projet de test et \t a édité la question d'origine. Merci pour votre temps. @Segev – rotoava
Je vous recommande d'utiliser uploadTaskWithStreamedRequest pour les gros téléchargements –