Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

166
Vistas
Fuga de memoria al insertar datos en SQLite con un controlador better-sqlite3

Puede que me equivoque, pero creo que hay una pérdida de memoria cuando intento insertar unas 300 filas cada 3 segundos. Lo probé en el hilo principal y en un hilo de trabajo, pero ambos muestran una pérdida de memoria clara. No estoy seguro de si esto está relacionado con SQLite o el controlador.

Estoy leyendo datos de un sensor a 100 muestras/segundo y me gustaría almacenarlos en una base de datos. Al principio pensé que podría ser el procesamiento de los datos lo que causa la fuga, pero una vez que apagué todo e intenté insertar algunos datos ficticios en un intervalo, vi el mismo problema. Mi aplicación se ejecuta en el marco ElectronJS. Ya he reconstruido el paquete better-sqlite3 para mi versión actual de electron.

Aquí hay un código de muestra que ejecuto en un subproceso de trabajo de NodeJS que muestra una pérdida de memoria clara.

 const { isMainThread, workerData, parentPort } = require('worker_threads'); const path = require('path'); const SQLITE = require('better-sqlite3'); const dbPath = path.join(__dirname, 'mydb.db'); const db = new SQLITE(dbPath, { timeout: 1000, }); db.exec('CREATE TABLE IF NOT EXISTS sensor_data (id INTEGER PRIMARY KEY AUTOINCREMENT, timeStamp INTEGER, PDRawData TEXT, LEDIntensities TEXT, gainValues TEXT, events TEXT, recordingId INTEGER); '); const pragma1 = db.pragma('journal_mode = WAL'); const pragma2 = db.pragma('synchronous = normal'); const insert = db.prepare( 'INSERT INTO sensor_data (timeStamp, PDRawData, LEDIntensities, gainValues, events, recordingId ) VALUES (@timeStamp, @PDRawData, @LEDIntensities, @gainValues, @events, @recordingId)' ); const insertMany = db.transaction((data) => { for (const dataPoint of data) { insert.run(dataPoint); } }); const sampleData = { timeStamp: 0, PDRawData: '12313,123123,12313,1243535,3456464,213132,42342', LEDIntensities: '123,435,123,4345,123,3435,132,345', gainValues: null, events: null, recordingId: null, }; const myData = Array(50).fill(sampleData); setInterval(() => { insertMany(myData); }, 500);

Otras posibles soluciones que he probado

Intenté exponer global.gc() y ejecutarlo después de cada inserción de los datos. También intenté ejecutar este script en el hilo principal y obtuve el mismo resultado. He intentado recrear mi archivo de base de datos muchas veces, pero eso tampoco ayuda. No estoy seguro de lo que estoy haciendo mal aquí. Realmente agradecería si pudiera ayudarme con este asunto.

Aquí está mi configuración: SO: Windows 10, Node v16.9.1 Electron Versión: 16.0.8 Better-sqlite3 Versión: 7.5.0 (también probé versiones anteriores como 7.4.0)

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda