Apryse/PDFTron Webviewer 工作线程在调用 closeDocument 或在 Edge 中处置后不会释放内存

问题描述 投票:0回答:1

我有 apryse webviewer(仅限客户端),并按照文档中的建议进行设置,其中我们仅使用 1 个 webviewer 实例,并调用

loadDocument
更改要预览的文件。

在 Edge 中加载 Excel 文档(大约 2-3mb)时,通过浏览器的任务管理器检查时内存增加至 3GB。
关闭模态框时,我们尝试调用

dispose
closeDocument
,但是内存没有释放,任务管理器仍然显示3GB。
任务管理器在选项卡下显示 PDFWorker 和 OfficeWorker,并且在内存工具中,显示工作人员具有较大的 ArrayBufferJs 值。

一开始Chrome也有这个问题,但是把后端类型改为

asm
后就解决了。
但是,Edge 仍然存在问题。
有没有办法释放pdf/office工作人员使用的内存?
问题是当用户打开另一个文件时,内存再次增加,浏览器最终崩溃。

*Excel 文件包含具有无限列标题的工作表(单击行标题并更改填充颜色)

设置如下:

let webviewerInstance = null;

// on mounted, instantiate webviewer
WebViewer(
  {
    path: '../../../lib',
    licenseKey: LICENSE_KEY,
    backendType: "asm",
  },
  document.getElementById('viewer')
).then(instance => {
  // store instance for later use
  this.webviewerInstance = instance;
});

// on click button, fetch data and open modal containing webviewer UI
/** fetch goes here **/
...
let fileUint8Array = new Uint8Array(buffer);
let file = new Blob([fileUint8Array], { type: "application/octet-stream" });
this.webviewerInstance.UI.loadDocument(file, { filename: "sample", extension: "xlsx" });
fileUint8Array = null;
file = null;

// on click close modal containing webviewer UI
this.webViewerInstance.UI.dispose();
this.webViewerInstance.UI.closeDocument();

我们尝试了以下方法,但没有成功:

  • 打电话
    dispose
  • 打电话
    closeDocument
  • 尝试了不同的后端类型
    asm
    ems
    wasm
  • 用新实例替换以前的 Webviewer
  • 为 GC 显式地将数组缓冲区变量设置为 null
  • 与新工人通话
    resetWorker(worker)
    ,希望之前的工人能够重置

更新
具有无限列数的 Excel 文件似乎会导致内存激增。
尝试了类似的 2-3mb 的 excel 文件,没有无限列,它渲染得很好。

memory-management memory-leaks pdftron
1个回答
0
投票

您使用的 WebViewer 版本是什么?您能在我们的查看器样本上重现这一点吗? https://docs.apryse.com/samples/web/samples/viewing/viewing/

能否提供一个测试文件?

最诚挚的问候, 达里安

© www.soinside.com 2019 - 2024. All rights reserved.