我有一个使用ExtJS 4.1.1编写的应用程序,其中经常使用一种数据仓库。我从服务器获取数据示例,并通过其“add”方法将其添加到仓库中进行一些验证。我定期执行此操作并从仓库中删除不需要的记录。
问题是,我的应用程序随着时间的推移越来越消耗内存,而且似乎已经找到了问题的来源,但我不知道该如何处理它。
以下是我的仓库定义:
这是我从中删除记录的方法:
当我在调试这个问题时,我检查了控制台,发现记录实际上已经从存储中删除了,但是没有从内存中删除。
编辑/更新: 我尝试根据你们的建议来解决这个问题,但都无法解决。为了确保我正确地找到了问题的源头,我提取了我的存储代码以更仔细地检查它,并查看它是否真的引起了问题。您可以在下面看到整个代码:
现在有个奇怪的问题:即使像上面代码清单中所示,存储部分被注释掉,内存泄漏仍然存在。我在任务管理方面犯了一些错误吗?
问题是,我的应用程序随着时间的推移越来越消耗内存,而且似乎已经找到了问题的来源,但我不知道该如何处理它。
以下是我的仓库定义:
this.store = Ext.create('Ext.data.Store', {
fields: ['when', 'data1', 'data2', 'data3', 'data4', 'data5', 'data6', 'data7', 'data8', 'data9'],
proxy: {
type: 'memory',
reader: {
type: 'json',
root: 'users'
}
},
sorters: [{
property: 'when',
direction: 'ASC'
}]
});
这是我从中删除记录的方法:
var record = self.store.getAt(j);
if((record.get('when') <= newMinDate) && (record.get('data'+id) !==' ')) {
self.store.remove(record);
record.destroy();
record = null;
j--;
ln--;
}
当我在调试这个问题时,我检查了控制台,发现记录实际上已经从存储中删除了,但是没有从内存中删除。
编辑/更新: 我尝试根据你们的建议来解决这个问题,但都无法解决。为了确保我正确地找到了问题的源头,我提取了我的存储代码以更仔细地检查它,并查看它是否真的引起了问题。您可以在下面看到整个代码:
Ext.define('TestApp.App', {
extend: 'Ext.app.Application'
});
Ext.application({
extend: 'MyApp.app.Application',
store: null,
launch: function() {
var self = this;
self.store = Ext.create('Ext.data.Store', {
fields: ['when', 'data1', 'data2', 'data3', 'data4', 'data5', 'data6', 'data7', 'data8', 'data9'],
proxy: {
type: 'memory'
},
sorters: [{
property: 'when',
direction: 'ASC'
}]
});
self.beginTask();
},
beginTask: function() {
var self = this;
Ext.TaskManager.start({
run: function() {
var jsonRaw = *very large json*; //about 650 samples
var json = Ext.JSON.decode(jsonRaw, true);
// self.store.add(json.data.samples);
// var ln = self.store.getCount();
// for (var j=0; j<ln; j++) {
// var record = self.store.getAt(j);
// self.store.remove(self.store.getAt(j));
// j--;
// ln--;
// record.destroy();
// delete record;
// }
json = null;
jsonRaw = null;
},
interval: 1000
});
}
});
现在有个奇怪的问题:即使像上面代码清单中所示,存储部分被注释掉,内存泄漏仍然存在。我在任务管理方面犯了一些错误吗?