electron 储存大量数据时 rss memory 上涨且不会下降 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Absofknglutely
V2EX    Electron

electron 储存大量数据时 rss memory 上涨且不会下降

  •  
  •   Absofknglutely 2021-04-21 18:00:06 +08:00 3005 次点击
    这是一个创建于 1723 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是我 github 上提的一个 issue, 好久了, 没人理 https://github.com/lectron/electron/issues/25208

    我在主进程使用 sqlite3 或者像 demo 上用 indexeddb 都避免不了这种处理大量数据引发的内存问题

    敢问大佬们有没有解决方案

    也只是很简单的一个 demo, 没什么骚操作

    const Dexie = require('dexie') const fs = require('fs-extra') const path = require('path') const { v4: uuid } = require('uuid') const DB_NAME = 'haha' const DB_VERSION = 1 class Database extends Dexie { testData constructor() { super(DB_NAME) this.setupSchema() } setupSchema() { this.version(DB_VERSION).stores({ testData: 'id, xx_id, xxxx_id, user, remark, level, deleted_at, created_at, xxxxxasdasd' }) this.testData = this.table('testData') } } const db = new Database() fs.readJSON(path.join(__dirname, './data.json')).then(async res => { for (let i = 0; i < 30; i ++) { res = res.map(item => ({ ...item, id: uuid() })) const t = Date.now() await db.testData.clear() await db.testData.bulkPut(res) await db.testData.toArray() console.log(`${i} exec cost: `, Date.now() - t) document.getElementById('done').innerText = String(i) } }) 
    第 1 条附言    2021-04-21 19:38:11 +08:00

    环境: mac big sur 数据库操作前主进程实际内存: 100MB左右 数据库操作后主进程实际内存: 170MB左右

    7 条回复    2021-04-21 19:44:21 +08:00
    EPr2hh6LADQWqRVH
        1
    EPr2hh6LADQWqRVH  
       2021-04-21 18:29:00 +08:00
    你到底是主进程还是渲染进程在搞这帮数据。。

    暴露一下 global.gc(), 自己调调 gc,看问题还在不
    Absofknglutely
        2
    Absofknglutely  
    OP
       2021-04-21 19:31:13 +08:00
    @avastms demo 是渲染进程, 可以以此为基础去看这个问题, gc 我也试过了, 没起作用

    // 主进程
    ipcMain.on('gc', () => {
    console.log('gc run in main')
    global.gc()
    })

    // 渲染进程
    fs.readJSON(path.join(__dirname, './data.json')).then(async res => {
    ... // 原逻辑

    global.gc()
    ipcRenderer.send('gc')
    alert('gc run in renderer')
    })
    EPr2hh6LADQWqRVH
        3
    EPr2hh6LADQWqRVH  
       2021-04-21 19:37:29 +08:00
    那是有点怪了,拿掉 console 试下,之前 console 会造成泄露。
    EPr2hh6LADQWqRVH
        4
    EPr2hh6LADQWqRVH  
       2021-04-21 19:39:03 +08:00
    你这 gc 隔几秒钟再执行,在你数据作用域消灭之后再触发
    Absofknglutely
        5
    Absofknglutely  
    OP
       2021-04-21 19:39:17 +08:00
    @avastms 注销掉 for 循环内 db 相关的三行就啥事没有, 证明不是 console 的问题
    Absofknglutely
        6
    Absofknglutely  
    OP
       2021-04-21 19:43:50 +08:00
    setTimeout(() => {
    global.gc()
    ipcRenderer.send('gc')
    alert('gc run in renderer')
    }, 10000)

    没有效果

    跟执行的时间点应该没有太多关系, 因为本身就是异步任务, 如果奏效, for 循环内早期的堆积的也会有部分清除才对
    Absofknglutely
        7
    Absofknglutely  
    OP
       2021-04-21 19:44:21 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5478 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 03:26 PVG 11:26 LAX 19:26 JFK 22:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86