这个我的测试用例指出,当使用带有 HTTP/2 连接的 NSURLSession 时,存在内存问题。
测试1:iOS 9.HTTP/2服务器
我使用 NSURLSession 上传 10M 文件到 HTTP/2 服务器,如果文件上传完成一切正常,但如果我在完成之前取消上传任务,则 10M 将永远不会释放。
测试2:iOS 9.HTTP1.1服务器
我用https1.1文件服务器测试同样的代码,我取消上传任务还是没有,一切正常,内存恢复正常。(释放了10M数据)
test3 iOS 8.HTTP/2 服务器
这种情况下一切正常。(NSURLSession 没有与 HTTP/2 进行协议协商)
所以,即使我使用 NSURLSession 有一些不合适的地方,NSURLSession 的性能在 HTTP/2 中也不正常。
除了内存问题之外,当使用带有 HTTP/2 的 NSURLSession 上传文件时,进度段大小很大(一次回调可能会达到 2M 'didSendBodyData')
我也读过这一页 https://stackoverflow.com/questions/28223345/memory-leak-when-using-nsurlsession-downloadtaskwithurl。 SSL可能会缓存一些东西,但不应该缓存整个文件。(当我取消任务或请求超时时,10M文件大小内存泄漏)
任何人知道导致问题的原因,都可以给我一些帮助。
谢谢。
问题更新0912:添加测试项目链接
测试项目:https://github.com/upyun/swift-sdk/tree/testleak 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