增加 Electron 渲染器进程中的 JavaScript 堆内存

z80*_*rew 6 google-chrome heap-memory electron

我的 Electron 应用程序在渲染器进程中需要大量内存。是的,这是有意的,不,没有办法解决它。(至少没有任何意义。)

performance.memory在渲染器进程中使用给出: jsHeapSizeLimit: 3760000000。而且我确实可以分配大约 3.5 GB 的内存,然后进程就会崩溃。

现在,有--max-old-space-size命令行参数来控制 Electron 应用程序中渲染器进程的可用 JS 堆大小。main.js我这样设置:

app.commandLine.appendSwitch('js-flags', '--max-old-space-size=1024')
Run Code Online (Sandbox Code Playgroud)

使用performance.memorynow 显示:jsHeapSizeLimit: 1130000000,仅比 1GB 多一点点,因此减小 JS 堆大小是有效的。但我无法将其增加到超过 3,760,000,000 字节。

尝试将其设置为 8 GB 不会增加 JS 堆大小限制:

app.commandLine.appendSwitch('js-flags', '--max-old-space-size=8192')
Run Code Online (Sandbox Code Playgroud)

performance.memory仍然说:jsHeapSizeLimit: 3760000000

我缺少什么?只能max-old-space-size减少可用内存而不能增加吗?或者我是否必须设置另一个参数以便渲染器进程可以利用可用的旧空间?

的重要部分process.versions:

{
  node: '14.16.0',
  v8: '8.9.255.24-electron.0',
  electron: '12.0.4',
  chrome: '89.0.4389.114'
}
Run Code Online (Sandbox Code Playgroud)

我的 16GB Macbook 和 64GB Windows 桌面上都会出现这种情况。

小智 1

我希望您找到问题的答案。然而,这个 Github 线程给出了答案: https://github.com/electron/electron/issues/2056

对我来说(电子11.5.0)有用的是--js-flags=--max-old-space-size=8192在packge.json脚本中添加:

{
"scripts": {
    "start": "electron --js-flags=--max-old-space-size=8192 main.js"
  }
}
Run Code Online (Sandbox Code Playgroud)