Tôi hiểu rằng tôi phải hủy đăng ký chứng nhận có thể quan sát (nghĩa là: Các quan sát có giá trị vô hạn) khi các thành phần bị hủy để ngăn rò rỉ bộ nhớ. Tôi không cần làm điều đó cho hữu hạn Quan sát vì chúng sẽ hoàn thành và tự động unsubscribe
.Góc 2/Rxjs: tôi có thực sự cần hủy đăng ký không?
Nhưng nếu tôi có thể tạo một vô hạnObservable
trong thành phần của tôi (ví dụ FormGroup.valueChanges
, hoặc QueryList.changes
), chương trình này sẽ bị phá hủy với thành phần chứa nó, vì vậy tôi nghĩ rằng họ sẽ không có rò rỉ bộ nhớ thậm chí nếu tôi không hủy đăng ký khỏi nó.
Dưới đây là một ví dụ đơn giản:
@Component({})
export class DummyComponent {
form: FormGroup;
constructor(private fb: FormBuilder) {
this.form = this.fb.group({
firstName: [''],
lastName: ['']
});
this.form.valueChanges.subscribe(
x => console.log(x)
);
}
}
Ở đây, tôi không unsubscribe
từ this.form.valueChanges
; khi thành phần của tôi bị phá hủy, số this.form.valueChanges
cũng sẽ bị hủy.
Có rò rỉ bộ nhớ trong trường hợp này không?
Bạn đã cố thêm một cuộc gọi lại hoàn toàn để đăng ký (...) và kiểm tra xem nó có được gọi khi thành phần bị hủy không? –
Tôi đã làm, và nó không được gọi là (tôi chỉ làm bài kiểm tra với 'this.form.valueChanges'). – freedonaab
Tôi đoán sau đó nó tốt hơn nhưng không cần thiết để bỏ đăng ký. Tôi sẽ không mong đợi một rò rỉ bộ nhớ bởi vì khi các thành phần bị phá hủy, nó sẽ nhận được rác thu thập, và đăng ký của bạn với nó. Nếu bạn đăng ký hoặc vượt qua các thuê bao bên ngoài của thành phần (ví dụ một dịch vụ) thì điều này có thể ngăn chặn các thành phần được GCed, nhưng nếu tất cả là trong thành phần nó không nên làm tổn thương. –