0

ストアの読み込みとメモリ リークに問題があります。5 秒ごとにロードする必要があるストアがあります。DelayedTask を使用してポーリングを実行しています。このアプリはポーリングを必要とし、長時間実行されます。ストアはかなり大きな JSON データセットを取得し、数時間後に 500 MB に達しました。コントローラーでポーリングを実行します。

すべてのロジックを削除して、ストアをロードするだけにしました。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);
            }
        });
     }
});
4

1 に答える 1

0

これをバグ Sencha フォーラムに投稿してみませんか? バグをテストするためのより賢明な場所でしょうか?

于 2013-04-01T01:49:12.410 に答える