Autodesk 查看器内存泄漏

Autodesk Viewer memory leak

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

每当我们关闭组件或路由到其他页面时,我们都会销毁当前创建的查看器。为此,我使用函数 viewer.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 上的最小 angular 项目提供了 link,您可以 运行。当您启动应用程序时,您可以使用切换按钮创建/销毁组件并触发问题。

  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

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

与此同时,看看您是否有任何事件 listeners/custom 扩展可能会保留对节点等的引用 - remove/unload 这些扩展,看看是否有帮助。