1

みんな!私は extjs4 で tablpanel を使用していますが、tabpanel でパネルを削除しても IE8 のメモリが減少せず、パネルを再度追加してもメモリが増加することがわかったので、以下のようにテストを記述します。

Ext.onReady(function() {
var currentItem;
var tabs = Ext.createWidget('tabpanel', {
    renderTo: 'tabs',
    resizeTabs: true,
    enableTabScroll: true,
    width: 600,
    height: 250,
    defaults: {
        autoScroll:true,
        bodyPadding: 10
    }
});

var __my_task = '';
var i = 0;
try{
    __my_task = {
            run: function(){
                if (i % 2 == 0){
                    for(var j = 0; j < 10; j++){
                        addTab(true);
                    }
                }else{
                    var items = [];

                    tabs.items.each(function(item){
                        if(item.closable){
                            if(!false || item != this.item){
                                items.push(item);
                            }
                        }
                    }, this);

                    Ext.each(items, function(item){
                        tabs.remove(item);
                        item.destroy();
                    }, this);
                } // else
                i ++;
            },
            interval: 300
    }
    Ext.TaskManager.start(__my_task);
}catch(e){}

// tab generation code
var index = 0;
function addTab (closable) {
    ++index;
    tabs.add(Ext.create('Ext.tree.Panel',{
        title: 'New Tab ' + index,
        iconCls: 'tabs',
        closable: !!closable
    }));
}

});

IE8で実行すると、メモリがすぐに増えます。コードが間違っていますか? 私への質問、ありがとう!

4

1 に答える 1

0

IMO Javascript (ご存知のように JS で記述された Extjs) にメモリ リークがあるかどうかを評価することはほとんどありません。オブジェクトはdelete()(destroy() will use it) で削除できますが、メモリが実際にいつ解放されるかはわかりません。

Javascript ガベージ コレクターの詳細については、削除または null への設定およびJavascript ガベージ コレクションを参照してください。

于 2012-04-18T10:46:09.857 に答える