2013-03-27 4 views
0

У меня возникли проблемы с загрузкой магазина и утечкой памяти. У меня есть магазин, который мне нужно загрузить каждые 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); 
      } 
     }); 
    } 
}); 
+0

может быть, тот факт, у вас нет ссылки здесь означает, что вы создаете новый экземпляр каждый раз, когда вы называете GetData() ... возможно использовать: MyStore = Ext.getStore («MyStore») ; myStore.load (...); вместо этого повторное использование ссылки, а не создание нового анонимного каждый раз – Dawesi

ответ

0

Почему вы не публикуете это на ошибки Сенча форуме? было бы более разумным местом для проверки ошибки?

+0

Спасибо за отзыв Dawesi. Я публиковал их на форуме. Но он не смог определить первопричину. Я переработал код для использования Ext.Ajax, чтобы вытащить данные, а не использовать хранилище. Я также лучше понимаю API и вскоре перейду к этой проблеме. Если я найду ответ, я отправлю его. – user2216183