Skip to content

geo3D 和 map3D 内存溢出 #131

@johnsnow20087349

Description

@johnsnow20087349

Hi,作者你好,我们在制作geo3D地图的时候出现了内存溢出的异常,我们使用setInterval,每3s切换一个地图,我们将会无限轮询全国所有省份,环境如下:
电脑: win10 16g内存
代码框架: angular4 + typescript
样例代码:http://gallery.echartsjs.com/editor.html?c=xHyL5_gEjW
样例为了重现效果,只是在世界地图和中国地图之间切换

我们将echarts封装为angular的directive来使用,在地图切换的时候我们调用了dispose(),并输出了isDispose为true,说明echarts实例已经删除了,echarts对象删除之后,我们重新init了echarts对象,并重新setOption了

初始化方法:

initChart() {
    if (this.__etheme) {
      this.myChart = echarts.init(this.el.nativeElement, this.__etheme);
    } else {
      this.myChart = echarts.init(this.el.nativeElement);
    }
    this.isEchartsInited = true;
    if (this.eoptionCache) {
      this.eoptionCache.forEach((eo) => {
        this.setOption(eo);
      });
      this.eoptionCache = [];
    }
    this.initEvent();
  }

对象销毁的方法:

ngOnDestroy(){
    this.destroyChart();
  }

  destroyChart() {
    if (this.myChart){
      console.log(this.myChart.isDisposed());
      console.log("echarts 对象 dispose了");
      this.myChart.dispose(this.myChart);
      console.log(this.myChart.isDisposed());
      console.log("echarts 对象是否被清楚");
    }
  }

setOption方法:

@Input('eoption')
  private set seteOption(option: any) {
    if (option) {
      this.__eoption = option;
      if (!this.isEchartsInited) {
        this.eoptionCache.push(option);
      } else {
        this.setOption(option);
      }
    }
  }

public setOption(newOption: any) {
    if (this.myChart && newOption) {
      var newMap = this.getNewMap(newOption); //这个是自己写的方法
      var _this = this;
      if (newMap) {
        this.registerMap(newMap, () => {
          _this.myChart.setOption(newOption, true);
          // }
        });
      } else {
        this.myChart.setOption(newOption);
      }
    }
  }

在每次地图切换的时候,都是先执行destroyChart()后再执行initChart(),最后setOption(),但即使是这样销毁了对象,内存依旧蹭蹭往上涨

内存使用截图:
default

浏览器异常截图:
webgl

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions