我在大型淘汰赛中狩猎内存泄漏。我发现了一种内存泄漏的模式,我似乎无法在其他地方找到它。
使用knockout的调试版本考虑以下代码:
var myObservable = ko.observable();
console.log('Before any subscriptions: ' + Object.keys(myObservable._subscriptions).length);
var myObservableArray = ko.observableArray([]);
var myComputed = ko.computed(function() {
myObservableArray().forEach(function(observableItem) {
var test = observableItem();
});
});
myObservableArray([myObservable]);
console.log('After adding to array: ' + Object.keys(myObservable._subscriptions).length);
myObservableArray([]);
console.log('Removed from array: ' + Object.keys(myObservable._subscriptions).length);
控制台将输出以下内容:
Before any subscriptions: 0
After adding to array: 1
Removed from array: 1
所以,问题是,在我的应用程序中,有一个点我完成使用给定的observable(控件视图模型上的属性,控件现已被删除)。我已经发布了对它的所有引用,但是全局计算机保留了对它的引用,从而使我的控件的视图模型不被垃圾收集。
我不想处理计算机 - 我仍然需要其他控件。我真的需要以某种方式销毁/处置可观察物本身。
我在这里缺少什么?