Dart 流 .asBroadcastStream 内存泄漏

2024-05-14

在我们的 Flutter 应用程序中,我们存在内存泄漏和流未关闭的情况。我们追踪源代码如下:

Rx.combineLatest(...).asBroadcastStream()

RxDart的结果.combineLatest()是单订阅流。添加.asBroadcastStream()使流可以方便地用于我们的各种 Flutter 显示器。然而,当这些显示关闭时,正在组合的流仍然处于活动状态。


来自.asBroadcastStream()文档:

当添加第一个订阅者时,返回的流将订阅该流,并且将保持订阅状态,直到该流结束,或者回调取消订阅.

因此,按照设计,流会一直存在,直到明确取消为止。要在最后一个侦听器取消时取消订阅,请使用:

Rx.combineLatest(...).asBroadcastStream( onCancel: (sub) => sub.cancel() )

有进一步的讨论Stream.asBroadcastStream - 容易造成泄露,原理是什么? #26686 https://github.com/dart-lang/sdk/issues/26686

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

Dart 流 .asBroadcastStream 内存泄漏 的相关文章

随机推荐

  • SQL/C# - UPSERT 上的主键错误

    UPDATE 简化的问题 从问题中删除了 C 在以下情况下 如何编写一个可以识别两行相同的 UPSERT 看看怎么有一个 b 退格键 在那里编码 奇怪的小字符 SQL 将它们视为相同 虽然我的 UPSERT 将此视为new data并在应该
  • xcode“将源编译为”覆盖特定文件

    我有一个项目 必须将 编译源为 值设置为 Objective C 不 根据文件类型 在我的主项目中不起作用 我从框架 特别是 OpenFeint 获得的文件有问题 该文件在编译为 Objective C 时出现编译错误 error poin
  • 转发按键事件

    我有一个文本框 想从另一个表单转发按键事件 到目前为止我已经有了我的表格 private readonly Action
  • 如何增加vm.max_map_count?

    我正在尝试在 Ubuntu EC2 计算机 t2 medium 中运行弹性搜索 但我收到消息 最大虚拟内存区域 vm max map count 65530 太低 至少增加到 262144 我怎样才能增加vm max map count v
  • 如何从Python列表中的字符串中删除双引号?

    我正在尝试在字典列表中获取一些数据 数据来自 csv 文件 因此都是字符串 文件中的键都有双引号 但由于这些都是字符串 我想删除它们 这样它们在字典中看起来像这样 key value 而不是这个 key value 我尝试简单地使用 str
  • 是否可以使用外部指示器来激活显示文件中的显示属性?

    我目前正在修改现有的 RPG 程序 目的是设置一个指示器 使该指示器激活显示文件中的显示属性ND来隐藏字段 问题是所有通用指标 IN01 IN99 都已用完 我无法在不干扰现有程序流程的情况下重用其中任何一个 可以用外部指示灯U1 U8代替
  • Scala:什么是 CompactBuffer?

    我试图弄清楚 CompactBuffer 的含义 和迭代器一样吗 请解释其中的差异 根据 Spark 的文档 它是 ArrayBuffer 的替代方案 可以提供更好的性能 因为它分配的内存更少 以下是 CompactBuffer 类文档的摘
  • 使 css nth-child() 只影响可见

    有没有办法用这个CSS只影响可见元素 table grid tr alt nth child odd background ebeff4 table grid tr alt nth child even background ffffff
  • Azure COSMOS DB 如何查询数组中的内容

    如何进行查询以获取文档数组 roles 中包含某些内容的文档 我想获取以下文档 其中 Trainer 是数组中的元素 enabled true profilePicture null roles Trainer Client SELECT
  • 如何在 django 中验证给定的 URL 是否来自特定域

    我有一个模型 class Profile models Model social github models URLField blank True null True social twitter models URLField blan
  • “清空缓存并硬重新加载”是否会清空整个缓存或仅清空与当前站点相关的部分?

    Chromium Chrome 中的 清空缓存并硬重新加载 是否会清空整个缓存或仅清空与当前站点相关的部分 我的暗示是 它绝对清空了所有缓存的资源 正如评论中所建议的那样 这个答案 https stackoverflow com a 149
  • 尝试用 Javascript 创建简单的幻灯片放映方法

    我一直在尝试创建一个基本的 JavaScript 片段 以便在单击链接时在网页上前后滑动图像 这是我的js代码网页部分
  • C# byte[] 的问题

    我正在将文件加载到字节 中 根据我的理解 byte 应该包含特定的字节元素 8 位 当我打印每个字节时 它们都不是 8 位 即它们的长度不是 8 我的代码 FileStream stream File OpenRead C Image Im
  • 使用同一个侦听器的多个活动

    我有 4 个活动 它们都包含一个 xml 页脚 其中包含 4 个按钮 每个活动一个 我现在想为这些按钮设置 onclicklistener 它是页脚中的自制菜单 问题是 如何使用侦听器以便重用代码 我有两个想法 创建一个实现 onclick
  • Typescript:如何从react-bootstrap导入特定组件

    早些时候我的应用程序位于ReactJs React bootstrap 现在我正在使用Typescript ReactJs React bootstrap 为了减少生产应用程序的大小 之前我曾经使用 导入react bootstrap组件i
  • Apple 针对 http 直播流媒体应用程序的政策

    这里有要求 http developer apple com library ios documentation NetworkingInternet Conceptual StreamingMediaGuide UsingHTTPLive
  • PHP将数据写入文件中间而不重写文件的最佳方法是什么

    我正在 php 1GB 中处理大型文本文件 我正在使用 file get contents file txt NULL NULL 100000000 100 要从文件中间获取数据 但如果我想将文件中的数据更改为与原始数据不同的更改 我将不得
  • Casperjs 和无法使用 captureSelector 保存屏幕截图

    我有这样的代码 casper thenOpen url function this echo Opening at width give some time for the page to load casper waitFor funct
  • 使用月份、年份、星期几和周数计算月份中的某一天

    如何在 PHP 中计算月份中的某一天 并给出月份 年份 星期几和周数 例如 如果我有 2013 年 9 月 星期几是星期五 周数是 2 那么我应该得到 6 2013 年 9 月 6 日是第二周的星期五 实现此目的的一种方法是使用相对格式 h
  • Dart 流 .asBroadcastStream 内存泄漏

    在我们的 Flutter 应用程序中 我们存在内存泄漏和流未关闭的情况 我们追踪源代码如下 Rx combineLatest asBroadcastStream RxDart的结果 combineLatest 是单订阅流 添加 asBroa