Autodesk 查看器内存泄漏
Autodesk Viewer memory leak
我在使用 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 项目提供了 link,您可以 运行。当您启动应用程序时,您可以使用切换按钮创建/销毁组件并触发问题。
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;
}
工程部门的最终建议是等待 Viewer v7.0,该版本将在几周内发布以供一般访问,并修复了多个错误并改进了内存管理。
与此同时,看看您是否有任何事件 listeners/custom 扩展可能会保留对节点等的引用 - remove/unload 这些扩展,看看是否有帮助。
我在使用 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 项目提供了 link,您可以 运行。当您启动应用程序时,您可以使用切换按钮创建/销毁组件并触发问题。
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;
}
工程部门的最终建议是等待 Viewer v7.0,该版本将在几周内发布以供一般访问,并修复了多个错误并改进了内存管理。
与此同时,看看您是否有任何事件 listeners/custom 扩展可能会保留对节点等的引用 - remove/unload 这些扩展,看看是否有帮助。