设备上的Autodesk Forge查看器中存在严重的内存泄漏

时间:2017-09-14 12:29:37

标签: memory-leaks autodesk-forge autodesk-viewer

我正在开发一个Angular / Typescript应用程序,该应用程序利用Autodesk Forge查看器在智能手机和平板电脑上显示建筑模型。应用程序本身运行顺利,但是当我关闭应用程序时会出现问题。关闭应用程序后,我注意到几乎没有任何内存被释放,如下图所示(我在8秒左右关闭应用程序)并且在打开查看器两三次之后它将耗尽内存和崩溃。 enter image description here 当我关闭应用程序时,我按照Forge文档中的描述调用tearDown()和finish()方法,并将对Forge查看器的所有可能引用设置为null,但它们仍然存在内存泄漏。这是我的观众代码的主要部分:

this.initOptions = {
    path: 'url to model',
    env: 'Local',
    useADP: false,
    extensions: [],
};

Autodesk.Viewing.Initializer(this.initOptions, () => {

    this.onEnvInitialized();
});

private onEnvInitialized() {

    this.viewer = new Autodesk.Viewing.Private.GuiViewer3D(this.viewerContainer.nativeElement, {});
    this.viewer.initialize();
    this.viewer.loadModel(this.initOptions.path, {}, (doc) => {
        // further forge viewer execution here
    }, (errorMsg) => {
        console.log(errorMsg);
    });
}

public ngOnDestroy() {

    // remove all eventlisteners
    this.initOptions = null;
    this.viewer.tearDown();
    this.viewer.finish();
    this.viewer = null;
}

这是一个已知问题和/或是否有某种方法可以在关闭后手动释放Forge查看器使用的内存? (这是用例的一部分,我必须能够在一个会话中相互打开三个以上的观众。)

更新[19-09-17]

我尝试在一个新的空的angular2项目中打开我的查看器,尽管通常使用的内存较少,但是仍然可以使用相同的不清除内存的行为,如here所示。我注意到事件监听器现在大幅减少了。我还将Forge Viewer更新为版本2.17,同样的问题在这里仍然适用。

2 个答案:

答案 0 :(得分:0)

您目前使用的是哪种版本的Viewer?在这里,您可以看到查看器版本的最新更改列表,默认情况下,v2.17的内存限制为ON。

https://developer.autodesk.com/en/docs/viewer/v2/overview/changelog/

如果未通过键入LMV_VIEWER_VERSION

从控制台定义查看器的版本,也可以检查该版本

让我知道,我们可以继续研究它。 干杯,

答案 1 :(得分:0)

问题依然存在于forge查看器的3.3.5版本中。然而,问题似乎更深一些。看起来在调用viewer.finish()时,它不会释放用于纹理的任何GPU内存。

每当您使用查看器离开页面时我们都会调用此函数,因为angular会破坏DOM中的画布。我希望.finish也可以从内存中删除纹理。是否还有其他函数可以调用来完全卸载任何模型和纹理?

以下是一些屏幕截图,您可以在其中看到内存堆积。

Initial initialisation of the page

after returning to this page after closing it

after returning to this page after closing it a third time