rot*_*ava 10 memory-leaks ios nsurlsession http2 nsurlsessiondatatask
这个My Test案例指出,当使用带有HTTP/2连接的NSURLSession时,存在内存问题.
test1:iOS 9. HTTP/2服务器
我使用NSURLSession将10M文件上传到HTTP/2服务器,如果上传的文件完成一切正常,但如果我在完成之前取消上传任务,10M将永远不会释放.
test2:iOS 9. HTTPs1.1服务器
我用https1.1文件服务器测试相同的代码,我是否取消上传任务,一切正常,内存恢复正常.(10M数据发布)
test3 iOS 8. HTTP/2服务器
这种情况一切正常.(NSURLSession没有协议协商到HTTP/2)
所以,即使有一些不适合我使用NSURLSession的东西,NSURLSession的性能也不适用于HTTP/2.
除了内存问题,当使用带有HTTP/2的NSURLSession上传文件时,进度段大小是巨大的(一次回调可能是5M'addSendBodyData')
我也读过这个页面.SSL可能会缓存一些东西,但不应该缓存整个文件.(当我取消任务或请求超时时,10M文件大小的内存泄漏)
任何人都知道导致问题的原因,可以给我一些帮助.谢谢.
问题更新0912:添加测试项目链接
测试项目: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
Run Code Online (Sandbox Code Playgroud)
来自苹果文档:
\n\n\n\n\n会话对象保留对委托的强引用,直到您的应用程序退出或显式使会话无效。如果您不使会话无效,您的应用程序将泄漏内存,直到退出。
\n
还要查看您的项目https://github.com/upyun/swift-sdk/tree/testleak您需要在 sessionTask.resume() 之后调用 finishTasksAndInvalidate() 因为您正在为每个请求创建会话
\n| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |