Ten przypadek My Test wskazuje, że podczas korzystania z NSURLSession z połączeniem HTTP/2 występuje problem z pamięcią.NSURLSession HTTP/2 wyciek pamięci
test1: iOS 9. HTTP/2 serwer
używam NSURLSession przesłać plik do 10M/serwera HTTP 2, jeżeli dodany plik zakończone wszystko jest ok, ale jeśli mogę anulować zadanie przesyłania przed jest ukończony, 10M nigdy się nie zwolni.
test2: iOS 9. HTTPs1.1 serwer
przetestować ten sam kod z serwerem plików https1.1, mogę anulować zadanie przesyłania lub nie, wszystko jest ok, pamięć wraca do normy. (dane 10M jest zwolniony)
TEST3 iOS 8. HTTP/serwer 2
Ta sprawa wszystko jest ok. (NSURLSession nie do negocjacji protokołu HTTP/2)
Tak więc Nawet jeśli jest coś, co nie jest odpowiednie przy korzystaniu z NSURLSession, wydajność NSURLSession nie jest normalna w przypadku HTTP/2.
Poza problemem pamięci, podczas korzystania NSURLSession z HTTP/2 do przesyłania pliku wielkość segmentu postęp jest ogromny (może 2m „didSendBodyData” na jednej oddzwaniania)
Ja też czytałem this page. Protokół SSL może buforować niektóre rzeczy, ale nie powinien buforować całego pliku. (Kiedy anuluję zadanie lub żądanie przekroczono limit czasu, wycieki pamięci o rozmiarze pliku 10M)
Ktoś wie, co jest przyczyną problemu, może udzielić mi pomocy. Dzięki.
aktualizacja Pytanie 0912: dodaj link projekt testowy
projekt testowy: 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
kod pocztowy. – Segev
Dodał link do projektu testowego i \t edytował pytanie dotyczące pochodzenia. Dziękuję za Twój czas. @Segev – rotoava
Polecam użyć uploadTaskWithStreamedRequest dla dużych uploadów –