Autodesk Viewer内存泄漏

时间:2019-05-24 14:45:54

标签: autodesk-forge autodesk-viewer

在使用伪造查看器(v6.6.1)的angular / typescript应用程序中,我遇到了一些大内存问题。之前也对此进行了讨论:Severe memory leaks in the Autodesk Forge viewer on devices

每当我们关闭组件或路由到另一个页面时,我们都会破坏当前创建的查看器。为此,我使用功能reader.finish();。但是,它似乎没有释放任何GPU内存。使用包含纹理的模型时,这一点最为明显。问题是,在我们的应用程序中打开几次后,由于使用了太多的gpu内存,它会崩溃。

要查看内存使用情况,我使用了chrome:// tracing /(使用记录类别memory-infra)。

以下是一些屏幕快照,您可以在其中查看内存堆积。

Initial initialisation of the page

after returning to this page after closing it

after returning to this page after closing it a third time

如您所见,纹理下的内存建立起来非常快。这只是我们使用的灯光模型。某些模型的建立速度超过250MB。

这是完成工作的组件代码的一部分。我还提供了一个指向github上可以运行的最小角度项目的链接。启动应用程序时,可以使用切换按钮创建/销毁组件并触发问题。

  public viewer;
  public options;
  public url = 'MODEL-YOUR-URL-HERE';

  @ViewChild('viewer')
  public viewerContainer: any;

  constructor() { }

 ngOnInit() {
    this.options = {
      env: 'Local',
      useADP: false,
      language: 'en',
    };

    Autodesk.Viewing.Initializer(this.options, () => {
      this.onEnvInitialized();
    });
  }


  public onEnvInitialized() {
    this.viewer = new Autodesk.Viewing.Private.GuiViewer3D(this.viewerContainer.nativeElement, {});
    this.viewer.initialize();
    this.viewer.loadModel( decodeURI(this.url), {}, () => { }, (aErrorCode) => { } );
  }

  ngOnDestroy() {
    this.viewer.finish();
    this.viewer = null;
  }

https://github.com/zedero/forge-angular-memory-issue

1 个答案:

答案 0 :(得分:0)

Engineering的最终建议是等待Viewer v7.0的发布,该版本将在几周内发布以供一般访问,并修复了多个错误并改善了内存管理。

同时,请查看是否有任何事件监听器/自定义扩展可能会保留对节点等的引用-删除/卸载它们并查看是否有帮助。