Memory usage doubles when calling loadSubtreeFromModel() in HOOPS Communicator 2026.4 (not seen in 2023 SP1)

Hi Team,

We are currently upgrading our application from HOOPS Communicator 2023 SP1 to 2026.4 and have encountered a memory-related issue.

Scenario

We load linked models using:


subRootNodeId =
    gfxResObject.index === 0 && !this.isExternal
        ? [0]
        : await this.model.loadSubtreeFromModel(
              this.viewer.linkedModelsNodeId,
              fileName
          );

Issue

In 2026.4, every time a new model is loaded using loadSubtreeFromModel(), the browser memory usage appears to increase significantly (roughly doubles) and is not released afterward.

The same workflow in 2023 SP1 does not exhibit this behavior, and memory remains relatively stable across multiple load operations.

Questions

  1. Were there any changes to the internal implementation of loadSubtreeFromModel() between 2023 SP1 and 2026.4 that could affect memory usage?
  2. Is there any additional cleanup/unload API that should now be called after removing or replacing a subtree?
  3. Are there known memory leaks or regressions related to linked model loading in 2026.4?
  4. What is the recommended way to completely unload a subtree loaded through loadSubtreeFromModel() and reclaim memory?

Additional Information

  • Source version: 2023 SP1
  • Target version: 2026.4
  • Memory increase is observed after repeatedly loading new models.
  • The issue appears specifically related to subtree/model loading rather than general viewer operations.

Any guidance on debugging or profiling this would be appreciated.

Thanks!

Hello @raja.r,

I’m not able to reproduce the issue when loading a model and subsequently deleting it. The memory consumption remains stable throughout in both v2023 SP1 and v2026.4.0.

Here is the test that I did using the stock arboleda model that comes with the Visualize Web package:

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));

await hwv.model.clear();

for (let i = 0; i < 50; i++) { 
    let modelLoad = await hwv.model.loadSubtreeFromModel(hwv.model.getAbsoluteRootNode(), "arboleda");
    
    await delay(1000);
    
    await hwv.model.deleteNode(modelLoad[0]);
	
	console.log("Load #: " + i);
}

It may be necessary for us to get the model(s) that you are using in order to do a deeper analysis. In that regard, please create a Visualize Web support ticket via our support portal (login required).

Thanks,
TIno