Утечка памяти в Autodesk Viewer - PullRequest
0 голосов
/ 24 мая 2019

У меня большие проблемы с памятью в приложении angular / typcript, использующем forge viewer (v6.6.1).Это также обсуждалось ранее: Серьезные утечки памяти в программе просмотра Autodesk Forge на устройствах

Всякий раз, когда мы закрываем компонент или направляем на другую страницу, мы уничтожаем созданный в настоящий момент модуль просмотра.Для этого я использую функцию viewer.finish ();Однако, похоже, что он не освобождает память GPU.Это особенно заметно при использовании моделей, содержащих текстуры.Проблема в том, что после нескольких раз, открыв это в нашем приложении, он вылетает из-за большого количества используемой памяти.

Чтобы увидеть наращивание использования памяти, я использовал chrome: // tracing / (используя память категории записей-infra).

Вот несколько скриншотов, где вы можете увидеть наращивание памяти.

Первоначальная инициализация страницы

после возврата на эту страницу после ее закрытия

после возврата на эту страницустраница после ее закрытия в третий раз

Как видите, память под текстурами накапливается довольно быстро.И это всего лишь легкая модель, которую мы используем.Некоторые модели создаются с шагом более 250 МБ.

Вот часть кода компонента, которая выполняет эту работу.Я также предоставил ссылку на минимальный угловой проект на 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;
  }

https://github.com/zedero/forge-angular-memory-issue

1 Ответ

0 голосов
/ 03 июня 2019

Конечные рекомендации Engineering - дождаться, пока Viewer v7.0, который будет выпущен для общего доступа, через несколько недель с множественными исправлениями ошибок и улучшениями в управлении памятью.

А пока посмотрите, есть ли у васлюбые прослушиватели событий / пользовательские расширения, которые могут удерживать ссылки на узлы и т. д. - удалите / выгрузите их и посмотрите, поможет ли это.

...