在使用伪造查看器(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;
}
答案 0 :(得分:0)
Engineering的最终建议是等待Viewer v7.0的发布,该版本将在几周内发布以供一般访问,并修复了多个错误并改善了内存管理。
同时,请查看是否有任何事件监听器/自定义扩展可能会保留对节点等的引用-删除/卸载它们并查看是否有帮助。