如何将磁盘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
相关产品推荐
相关产品推荐

