You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将磁盘SQLite数据库直接加载至内存(C#实现)

SQLite磁盘数据库一键加载至内存的简便方案(C# + System.Data.SQLite)

针对你使用System.Data.SQLite(v1.0.117.0,支持SQLite 3.40.0)将磁盘数据库加载至内存的需求,完全无需手动建表、复制数据这类繁琐操作,有两种高效简便的实现方式:

方法一:利用SQLite备份API(推荐)

System.Data.SQLite封装了SQLite原生备份功能,只需打开两个连接,调用内置方法即可完成全量复制:

using System.Data.SQLite;

// 打开磁盘数据库连接
using var diskConnection = new SQLiteConnection(@"Data Source=C:\path\to\myDB.db;Version=3;");
diskConnection.Open();

// 打开内存数据库连接
using var memoryConnection = new SQLiteConnection(@"Data Source=:memory:;Version=3;New=True;");
memoryConnection.Open();

// 一键完成磁盘库到内存库的全量备份(包含表结构、数据、索引、视图等所有对象)
diskConnection.BackupDatabase(
    destination: memoryConnection,
    destinationName: "main",
    sourceName: "main",
    pages: -1, // -1表示备份所有数据页
    callback: null,
    retryMilliseconds: 0
);

// 内存数据库已就绪,可直接执行查询
using var queryCmd = new SQLiteCommand("SELECT * FROM YourTargetTable", memoryConnection);
using var reader = queryCmd.ExecuteReader();
// 处理查询结果逻辑...

方法二:使用ATTACH结合备份命令

通过SQL命令挂载磁盘库后执行备份操作,适合需要自定义备份逻辑的场景:

using System.Data.SQLite;

using var memoryConnection = new SQLiteConnection(@"Data Source=:memory:;Version=3;New=True;");
memoryConnection.Open();

// 将磁盘数据库挂载到当前内存连接
using var attachCmd = new SQLiteCommand("ATTACH DATABASE 'C:\\path\\to\\myDB.db' AS diskDB", memoryConnection);
attachCmd.ExecuteNonQuery();

// 执行备份:把diskDB的所有内容复制到内存库的main schema
using var backupCmd = new SQLiteCommand("BACKUP diskDB TO main", memoryConnection);
backupCmd.ExecuteNonQuery();

// 卸载磁盘数据库连接
using var detachCmd = new SQLiteCommand("DETACH DATABASE diskDB", memoryConnection);
detachCmd.ExecuteNonQuery();

// 内存数据库已完成加载,可正常使用

注意事项

  • 内存数据库仅在连接打开时存在,关闭连接后数据会立即释放,若需持久化可反向备份回磁盘
  • 两种方法均自动处理表结构、数据、索引、约束等所有数据库对象,无需手动干预
  • 50MB以内的数据库加载速度极快,完全满足常规业务需求

内容的提问来源于stack exchange,提问作者AlainD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 21:53:25