У меня возникли проблемы с загрузкой магазина и утечкой памяти. У меня есть магазин, который мне нужно загрузить каждые 5 секунд. Я использую DelayedTask для выполнения опроса. Это приложение требует опроса и будет работать в течение длительных периодов времени. Магазин оттягивает довольно большой набор данных JSON и через пару часов ударил 500 МБ. Я выполняю опрос в контроллере.Sencha Touch 2.1 Store Memory Memory Leak
Я отключил всю логику вплоть до загрузки магазина. Независимо от того, использую DelayedTask или setInterval, утечка такая же. Я отследил его до логики store.load. По крайней мере, я думаю, что у меня есть. :)
Я также удалил обратный вызов из загрузки магазина и выполнил задачу task.delay в прослушивающем событии события. Утечка по-прежнему сохраняется.
Итак, я не знаю, выполняю ли я это неправильно и вводя закрытие или это ошибка?
Я также использовал Ext.Ajax, чтобы вытащить данные каждые 5 секунд. Утечка памяти все еще существует, но она намного меньше.
Любая помощь оценена!
Модель:
Ext.define('fimobile.model.myModel', {
extend: 'Ext.data.Model',
config: {
fields: [
{name: 'a', type: 'string'},
{name: 'b', type: 'string'},
{name: 'c', type: 'string'},
{name: 'd', type: 'string'},
{name: 'e', type: 'string'},
{name: 'f', type: 'string'},
{name: 'g', type: 'string'},
{name: 'h', type: 'string'},
{name: 'i', type: 'string'},
{name: 'j', type: 'string'}
]
}
});
Магазин:
Ext.define('fimobile.store.myStore', {
extend: 'Ext.data.Store',
config: {
storeId: 'myStoreID',
model: 'app.model.myModel',
proxy: {
type: 'ajax',
url : url,
reader: {
type: 'json',
rootProperty: 'data',
successProperty: 'success'
}
},
autoLoad: true
}
});
Контроллер:
Ext.define('fimobile.controller.myController', {
extend: 'Ext.app.Controller',
config: {
views: ['myView'],
models: ['myModel'],
stores: ['myStore'],
refs: {
},
control: {
'myView': {
initialize: this.start
}
}
},
start: function() {
task = Ext.create('Ext.util.DelayedTask', function() {
this.getData();
}, this);
task.delay(5000);
},
getData: function() {
Ext.getStore('myStore').load({
scope: this,
callback : function(records, operation, success) {
console.log('callback');
task.delay(5000);
}
});
}
});
может быть, тот факт, у вас нет ссылки здесь означает, что вы создаете новый экземпляр каждый раз, когда вы называете GetData() ... возможно использовать: MyStore = Ext.getStore («MyStore») ; myStore.load (...); вместо этого повторное использование ссылки, а не создание нового анонимного каждый раз – Dawesi