angular - 内存中未释放的订阅者
问题描述
我目前正在使用 Angular v5 和 rxjs v.5.5.6。
我想减少 Angular 5 组件中的内存泄漏。我已经实施了“官方”推荐的策略,方法是在每次订阅前输入 takeUntil(this.destroy$)。
import {takeUntil} from 'rxjs/operators';
import { Subject } from 'rxjs/Subject';
...
private destroy$ = new Subject();
...
// sample subscriber
this.adminService.GetCompanySettings('potatoCorp').pipe(
takeUntil(this.destroy$)
).subscribe(res => {}, null, null);
// sample mergemap combinator
this.basicMemberService.currentMember.pipe(
mergeMap(currentMember => {
// do some internal logic
return this.utilityService.getMemberInfo(currentMember.Id)/* 'Tried this'.pipe(
takeUntil(this.destroy$))
*/
}),
takeUntil(this.destroy)
).subscribe(result => {
// do something here
}
)
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
我尝试将 pipe(takeUntil) 策略添加到 mergeMap 中返回的 observable 中,但几乎没有效果。
第一个是仅仅停留在主页上。第二种是进入memberDetails后,返回首页。
为什么会有这么多(各种类型的)订阅者保留在内存中?目前,每次用户执行最基本的操作时,堆都会增加大约 5 MB。
解决方案
推荐阅读
- javascript - 向 iCal 数据/日历对象添加警报
- wordpress - 引导菜单的固定顶级类在 WordPress 的大型设备上不起作用
- python - 神经网络的手动预测出错
- python - 尝试解析来自 facebook 群组的帖子时出现 facepy.exception (#200)
- elixir - 如何在不保存本地的情况下将数据上传到谷歌存储
- javascript - thymeleaf 中的 JavaScript 脚本在页面加载时不运行?
- javascript - 如何使用 StreamSaver.js 从 Axios 消费下载流?
- javascript - Vuelidate没有显示正确的错误
- teamcity - 在 Razor 页面中禁用 ReSharper HTML 代码检查的正确方法是什么?
- python - 计算与 pandas 的滚动互相关(不是 Pearson)