NSURLSession HTTP/2 内存泄漏

2024-03-28

这个我的测试用例指出,当使用带有 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

来自苹果文档:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSURLSession HTTP/2 内存泄漏 的相关文章

  • 为什么 Xcode 在构建到设备时会复制未更改的资源?

    我正在处理一个相当大的 资源较多的 iOS 项目 我不禁注意到 Xcode 复制了数百个资源 纹理 精灵表 声音文件等 这些资源自上次以来根本没有改变我构建该设备的时间 当每个构建需要 2 4 分钟才能在设备上弹出时 这使得编码变得非常非常
  • 在 swift for iOS 中以编程方式设置图像的拉伸参数

    因此 如果我们只想拉伸图像的一部分 无论是常规图像还是背景图像 我们在布局编辑器中使用以下设置 您如何以编程方式设置这些 我正在使用 Xcode 7 2 1 指定图像的上限插图 您可以通过使用来设置拉伸细节UIImage method re
  • UICollectionViewCell - 内容不会与单元格的 contentView 一起动画

    问题看起来像这样 http i imgur com 5iaAiGQ mp4 https i imgur com 5iaAiGQ mp4 红色是cell contentView的颜色 这是代码 https github com nezhybo
  • 在 iOS 8 Today 扩展中获取 parse.com 用户数据时出现异常

    我正在尝试获取 PFUser 的 PFObjects 列表以在 iOS 8 Today Widget 中显示 按照此博客文章 http blog parse com announcements introducing local data
  • 致命错误:CALL_AND_RETRY_LAST 分配失败 - JavaScript 堆内存不足错误

    我运行时收到此错误ng 构建 prod 92 块资产优化 4136 0155D210 443646 ms 标记 扫描 703 5 770 3 gt 703 6 759 8 MB 2162 2 0 0 ms 自标记开始以来 0 0 ms 0
  • 确定视口或“标准”浏览器的最佳方法

    所以 现在我们都知道 iOS 移动 Safari 使用视口 Android 浏览器也是如此 而不是 标准 浏览器窗口 这会导致问题overflow hidden and position fixed 不幸的是 iPad 的情况也是如此 我想
  • 无法覆盖 Rustup 工具链以自定义构建 iOS 工具链

    我正在用我的 Rust 版本创建我自己的工具链 我需要它与 iOS 架构进行交叉编译 当尝试设置默认工具链或覆盖当前目录的工具链时 我收到有关工具链名称的错误 以下是我创建这个新工具链所采取的步骤 创建 Rustup 工具链 rustup
  • 如何在我的应用程序中从存折访问通行证?

    我正在创建应用程序 在其中添加并显示从 iOS6 存折应用程序到我的应用程序的通行证 但是当我在模拟器上运行应用程序时 它显示添加的通行证 但是当我在设备上运行相同的应用程序时 它显示我的存折是空的 我已关注iOS6 教程集成存折您的应用程
  • 如何在iPhone应用程序中每天的特定时间调用一个方法?

    我想在我的 iPhone 应用程序中每天的特定时间调用一个方法 我怎样才能实现这个目标 使用 iPhone SDK 和封闭的应用程序并不能做很多事情 您可以让它在特定时间发送本地推送通知 但在用户手动打开您的应用程序之前不会执行您的代码 请
  • iPhone应用程序NSNumber内存泄漏

    我遇到了内存泄漏 但我不知道它从哪里来以及如何修复它 在某些时候 我计算两个位置之间的距离 double calc self getDistance location to otherLocation NSNumber distance N
  • 更改框架时 UITextView 光标位于框架下方

    我有一个UIViewCOntroller其中包含一个UITextView 当键盘出现时 我像这样调整它的大小 pragma mark Responding to keyboard events void keyboardDidShow NS
  • 如何在使用图像创建视频时添加图像变化动画

    我有一组图像 我想通过按顺序播放这些图像来创建视频 我想在图像发生变化时添加不同类型的动画 建议我一些方法或任何解决方案来通过 Cocoa 框架在 Objective C 中实现此功能 这是制作图像视频的工作代码 但请建议我们在制作视频时如
  • 如何给objc_exception_throw添加断点?

    这是布拉德 拉森对此的回答SO https stackoverflow com questions 1093999 stack trace or more info on unhandled exception in xcode iphon
  • UIButton 的图像随滚动视图滚动,但其操作/方法仍保留在原始位置

    我有一个自动滚动的 UIScrollView 我使用 initWithFrame 创建了几个按钮 每个按钮都有一个图像和一个独特的操作 方法 并将它们全部添加到滚动视图中 按钮的图像可以随着滚动视图自动滚动 但是当我单击每个按钮时 这不是我
  • 如何使用 OpenGL ES 2.0 旋转对象?

    在 OpenGL ES 1 1 中 您可以使用glRotatef 旋转模型 但 OpenGL ES 2 0 中不存在该函数 那么 在OpenGL ES 2 0中如何进行旋转呢 为了遵循克里斯蒂安所说的 您需要自己跟踪模型视图矩阵并操纵它来执
  • ios 中的位置时间戳精度

    在分析 iOS 10 中的位置服务后 发现缓存行为存在一些不一致 定期 在我的例子中每 20 秒 获取位置会返回位置 但它们的时间戳不按时间顺序排列 这表明缓存位置可能有问题 因此 如果您通过位置时间戳检查准确性 最好也保存以前的时间戳 这
  • 从 UIButton 调用类外部的函数

    我有一个函数 我想在按下按钮时调用它 但与我迄今为止所做的任何事情不同 我希望能够从多个 ViewController 中的任何一个访问它 我不想在每个 ViewController 中重复相同的代码块 我尝试在 ViewControlle
  • Swift 5 / Xcode 11 更新后模拟器在动画块处冻结

    我在 Xcode 11 中将项目更新为 Swift 5 现在程序在 iPhone 11 模拟器中的动画块处冻结 当我在动画之后设置断点时 它永远不会命中它 重新启动 Xcode 和模拟器并没有解决问题 如果我在设备上运行该程序 它可以正常工
  • 使用 NSPredicate 进行过滤,用于数组内字典内数组的数组计数

    我有如下格式的数组 xyz Array with different values many more keys same as above dictionary many more dictionaries 在这里看 我有字典的主数组 其
  • 自己应用程序锁屏中的 iPod 控制

    如何为我自己的应用程序使用锁屏 iPod 控件 我尝试了MPNowPlayingInfoCenter 但是如果我设置了信息 它就不会显示在任何地方 不在锁定屏幕上 也不在 AppleTV 上播放 我使用 AVPlayer 来播放我的音频文件

随机推荐