我正在开发一个Angular / Typescript应用程序,该应用程序利用Autodesk Forge查看器在智能手机和平板电脑上显示建筑模型。应用程序本身运行顺利,但是当我关闭应用程序时会出现问题。关闭应用程序后,我注意到几乎没有任何内存被释放,如下图所示(我在8秒左右关闭应用程序)并且在打开查看器两三次之后它将耗尽内存和崩溃。 当我关闭应用程序时,我按照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
,同样的问题在这里仍然适用。
答案 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