【发布时间】:2019-10-11 04:39:05
【问题描述】:
我在使用 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 项目的链接。当您启动应用程序时,您可以使用切换按钮来创建/销毁组件并触发问题。
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;
}
【问题讨论】:
-
试图终止属性工作者并删除对这三个对象的所有可能引用,但不知何故,它们仍在被引用,当查看器自行终止时,它们可能没有被正确处理。仍在与工程部核实,很快就会回复。
标签: autodesk-forge autodesk-viewer