首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSURLSession HTTP/2内存泄漏

NSURLSession HTTP/2内存泄漏
EN

Stack Overflow用户
提问于 2016-09-09 10:22:43
回答 1查看 657关注 0票数 10

这是我的测试案例,指出当使用带有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中也是不正常的。

除了内存问题之外,当使用NSURLSession与HTTP/2一起上传文件时,进度段的大小是巨大的(5月200万次回叫时的“didSendBodyData”)

我还读过this page。SSL可能缓存一些东西,但不应该缓存整个文件。(当我取消任务或请求超时时,10M文件大小内存泄漏)

任何人都知道问题的原因,可以给我一些帮助。谢谢。

问题更新0912:添加测试项目链接

测试项目:https://github.com/upyun/swift-sdk/tree/testleak

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-06 20:52:06

苹果博士:

会话对象保持对委托的强烈引用,直到应用程序退出或显式地使会话无效。如果您不使会话无效,应用程序会泄漏内存,直到它退出为止。

此外,查看您的项目https://github.com/upyun/swift-sdk/tree/testleak,您需要在sessionTask.resume()之后调用finishTasksAndInvalidate(),因为您正在创建每个请求的会话

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39409357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档