ios - NSURLSession HTTP/2 pérdida de memoria
memory-leaks http2 (1)
De apple doc:
El objeto de la sesión guarda una fuerte referencia al delegado hasta que su aplicación finalice o invalide explícitamente la sesión. Si no invalida la sesión, su aplicación pierde memoria hasta que se cierra.
También mirando su proyecto https://github.com/upyun/swift-sdk/tree/testleak necesita llamar a finishTasksAndInvalidate () después de sessionTask.resume () ya que está creando sesión por solicitud
En estos casos de Mi prueba, señalar que al usar NSURLSession con una conexión HTTP / 2 hay un problema de memoria.
test1: iOS 9. HTTP / 2 servidor
Uso NSURLSession para cargar un archivo de 10M en un servidor HTTP / 2, si el archivo cargado completó todo está bien, pero si cancelo la tarea de carga antes de que se complete, el 10M nunca se lanzará.
test2: iOS 9. Servidor HTTPs1.1
Pruebo el mismo código con un servidor de archivos https1.1, cancelo la tarea de carga o no, todo está bien, la memoria vuelve a la normalidad (se lanzan datos de 10M)
test3 iOS 8. HTTP / 2 servidor
En este caso todo está bien. (NSURLSession no negoció el protocolo con HTTP / 2)
Entonces, incluso hay algo que no es apropiado con mi uso de NSURLSession, el rendimiento de NSURLSession no es normal con HTTP / 2.
Además del problema de memoria, al usar NSURLSession con HTTP / 2 para cargar archivos, el tamaño del segmento de progreso es enorme (2M de mayo ''didSendBodyData'' en una sola llamada)
También había leído esta página . SSL puede almacenar en caché algo, pero no debe almacenar en caché todo el archivo. (Cuando cancelo la tarea o solicito el tiempo de espera agotado, se pierde la memoria del tamaño de 10M)
Alguien sabe qué causa el problema, podría darme algo de ayuda. Gracias.
Actualización de pregunta 0912: agregue un enlace de proyecto de prueba
Proyecto de prueba: 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