Memory leaks 设备上的Autodesk Forge viewer内存严重泄漏

Memory leaks 设备上的Autodesk Forge viewer内存严重泄漏,memory-leaks,autodesk-forge,autodesk-viewer,Memory Leaks,Autodesk Forge,Autodesk Viewer,我正在开发一个Angular/Typescript应用程序,它利用Autodesk Forge viewer在智能手机和平板电脑上显示建筑模型。应用程序本身运行平稳,但问题发生在我关闭应用程序时。关闭应用程序后,我注意到几乎没有任何内存被释放,如下图所示(我在8秒左右关闭应用程序),打开查看器两到三次后,它将耗尽内存并崩溃。 当我关闭应用程序时,我调用tearDown()和finish()方法,如Forge文档中所述,并将对Forge viewer的所有可能引用设置为null,但它们仍然存在内存

我正在开发一个Angular/Typescript应用程序,它利用Autodesk Forge viewer在智能手机和平板电脑上显示建筑模型。应用程序本身运行平稳,但问题发生在我关闭应用程序时。关闭应用程序后,我注意到几乎没有任何内存被释放,如下图所示(我在8秒左右关闭应用程序),打开查看器两到三次后,它将耗尽内存并崩溃。 当我关闭应用程序时,我调用tearDown()和finish()方法,如Forge文档中所述,并将对Forge viewer的所有可能引用设置为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 viewer使用的内存?(这是用例的一部分,我必须能够在一个会话中打开三个以上的查看器。)

更新[19-09-17]


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

您当前使用的是哪个版本的查看器?在这里,您可以看到查看器版本上最近更改的列表,v2.17默认设置了内存限制


此外,如果未从控制台定义查看器的版本,则可以通过键入LMV_viewer_version来检查查看器的版本。您当前使用的查看器版本是什么?在这里,您可以看到查看器版本上最近更改的列表,v2.17默认设置了内存限制


此外,如果未通过键入LMV_viewer_version从控制台定义查看器的版本,则可以检查查看器的版本。forge viewer的版本3.3.5仍然存在问题。然而,这个问题似乎有点更深。调用
viewer.finish()

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

这里有一些屏幕截图,你可以看到内存的积累


forge viewer的3.3.5版仍然存在问题。然而,这个问题似乎有点更深。调用
viewer.finish()

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

这里有一些屏幕截图,你可以看到内存的积累


Hi Jaime,我目前正在使用Forge viewer的
2.13版。我已经试用过较新版本的查看器,但这破坏了我们大部分的事件处理,因此我最终恢复到2.13版本。我建议尝试升级到较新版本,以解决您遇到的内存泄漏问题。您当前在查看器中遇到哪些问题会中断事件处理?我不相信在不升级到新版本的情况下可以做任何事情来解决这个问题。升级到2.17后,
最终帧渲染更改事件在项目中不再触发。我们将此事件侦听器与
GEOMETRY\u LOADED\u事件一起使用,以确定查看器何时准备好使用。但由于第一个事件从未触发,应用程序将在等待事件触发时陷入停滞。对于这个事件处理程序,有没有其他方法可以知道模型何时被完全加载?您好,我已经用
v2.17
v3.1.1
测试了
FINAL\u FRAME\u RENDERED\u CHANGED\u event
事件,它在我这方面工作得很好。您介意提供一个可复制的案例(没有角度框架的纯forge应用程序)向
forge演示这一点吗。help@autodesk.com
?在发送给我们之前,请删除您提供的任何机密数据,谢谢!您好@EasonKang,我将我们的查看器的纯JS版本发送到autodesk帮助热线。希望这能有所帮助。我注意到事件偶尔不会触发(大约每打开查看器5次就触发一次)。嗨,Jaime,我目前正在使用Forge viewer的版本
2.13
。我已经试用过较新版本的查看器,但这破坏了我们大部分的事件处理,因此我最终恢复到2.13版本。我建议尝试升级到较新版本,以解决您遇到的内存泄漏问题。您当前在查看器中遇到哪些问题会中断事件处理?我不相信在不升级到新版本的情况下可以做任何事情来解决这个问题。升级到2.17后,
最终帧渲染更改事件在项目中不再触发。我们将此事件侦听器与
GEOMETRY\u LOADED\u事件一起使用,以确定查看器何时准备好使用。但由于第一个事件从未触发,应用程序将在等待事件触发时陷入停滞。对于这个事件处理程序,是否有其他方法可以知道模型何时被完全加载?您好,我已经用
v2.17
a测试了
FINAL\u FRAME\u RENDERED\u CHANGED\u event
事件