forEach 会在 Dart 的广播流中泄漏吗?
Will forEach leak in a Dart's Broadcast Stream?
我有一个 StreamController.broadcast()
,我在创建时将其 Steam
传递给我的许多 Flutter Widget。
因为每次 build
我都会重新创建这些小部件,我想知道在这些小部件中使用 Stream.forEach()
是否会导致内存泄漏,因为 forEach()
没有机制来关闭 Subscription
。我想知道这些 Subscription
对象是否不会被清理,或者即使 Widgets 本身不会超出内存。
是的,会的。
侦听器一直保持到流结束或发出错误为止。
因此,如果您在 build
中执行 Stream.forEach
,那么对小部件的任何重建都会添加一个侦听器,而不会删除之前的侦听器。
我有一个 StreamController.broadcast()
,我在创建时将其 Steam
传递给我的许多 Flutter Widget。
因为每次 build
我都会重新创建这些小部件,我想知道在这些小部件中使用 Stream.forEach()
是否会导致内存泄漏,因为 forEach()
没有机制来关闭 Subscription
。我想知道这些 Subscription
对象是否不会被清理,或者即使 Widgets 本身不会超出内存。
是的,会的。
侦听器一直保持到流结束或发出错误为止。
因此,如果您在 build
中执行 Stream.forEach
,那么对小部件的任何重建都会添加一个侦听器,而不会删除之前的侦听器。