NSURLSession HTTP / 2 pérdida de memory

En este caso, mis casos de testing indican que al usar NSURLSession con una connection HTTP / 2 hay un problema de memory.

Test1: iOS 9. Servidor HTTP / 2

Utilizo NSURLSession para cargar el file 10M en un server HTTP / 2, si el file cargado completo todo está bien, pero si cancelo la tarea de carga antes de que se complete, el 10M nunca se liberará.

test2: server de iOS 9. HTTPs1.1

Probar el mismo código con un server de files https1.1, cancelo la tarea de carga o no, todo está bien, la memory vuelve a la normalidad (se liberan datos de 10M)

test3 iOS 8. Servidor HTTP / 2

Este caso, todo está bien. (NSURLSession no negoció el protocolo con HTTP / 2)

Por lo tanto, incluso hay algo que no es apropiado con el uso de NSURLSession, el performance de NSURLSession no es normal con HTTP / 2.

Además del problema de memory, cuando se usa NSURLSession con HTTP / 2 para upload files, el tamaño del segmento de progreso es enorme (2M de mayo 'didSendBodyData' en una callback)

También había leído esta página . SSL puede almacenar en caching algo, pero no debe almacenar en caching todo el file. (Cuando cancelo la tarea o solicito el time de espera, la memory del tamaño del file 10M se pierde)

Alguien sabe qué causa el problema, podría darme alguna ayuda. Gracias.


Actualización de pregunta 0912: agregar un enlace de testing del proyecto

Pruebe el proyecto: 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 

Desde apple doc:

El object de session mantiene una fuerte reference al delegado hasta que su aplicación salga o invalide explícitamente la session. Si no invalida la session, su aplicación pierde memory hasta que sale.

También mirando su proyecto https://github.com/upyun/swift-sdk/tree/testleak , debe llamar a finishTasksAndInvalidate () después de sessionTask.resume () ya que está creando session por request

    Intereting Posts