首页 新闻 会员 周边 捐助

C#操作Sqlite内存数据库的困扰

0
悬赏园豆:20 [已解决问题] 解决于 2014-04-23 14:46

有一个项目,服务端用java+oracle,客户端用C#做的winform程序,sqlite作为本地数据库(将需要的数据从服务器数据库同步下载到本地数据库,供程序查询使用)。
随着业务查询的需求复杂度增加,发现sqlite的查询效率变低!
听说sqlite支持将本地数据库文件 读取为内存数据库,查询效率会提升数倍,可是真的不知道从哪里下手,希望有高手给个思路:

C#怎么读取本地sqlite数据库文件为内存数据库,怎么查询?感谢!

飞扬Design的主页 飞扬Design | 初学一级 | 园豆:58
提问于:2013-12-26 17:49
< >
分享
最佳答案
0

用特定的连接字符串就行了。

Data Source=:memory:;Version=3;

然后不关闭连接,就可以使用该内存数据库了。关闭后,内存数据库就没了。只能重新开连接。

为了保持连接,可以使用static SqliteConnection

收获园豆:10
幻天芒 | 高人七级 |园豆:37205 | 2013-12-26 19:07

谢谢,可是我需要把本地数据库读取为内存数据库,怎么弄呢?我的数据都在数据库文件里

飞扬Design | 园豆:58 (初学一级) | 2013-12-26 19:13

@飞扬Design: 建表语句,开一个本地文件的连接,然后写入到内存。

幻天芒 | 园豆:37205 (高人七级) | 2013-12-26 19:15

@幻天芒: 建两个数据库连接?能贴点代码么?万分感谢!!!!

飞扬Design | 园豆:58 (初学一级) | 2013-12-26 19:20

@飞扬Design: 

var conMemory=new SqliteConnection("");//内存数据库连接
var conFile=new SqliteConnection("");//文件数据库连接
//然后读取conFile下的每个表的数据,批量写入到conMemory中
var tableNames=new[]{"table1,"table2"};
foreach(var tableName in tableNames)
{
    //开启事务
    this.InsertData(conMemory,conFile,tableName);//读取conFile下的tablaName表的数据,写入到conMemory中,大概思路就是这样。我暂时没找到更快速的直接附加方式,呵呵。
}
幻天芒 | 园豆:37205 (高人七级) | 2013-12-27 11:57
其他回答(1)
0

查询效率,好几个方面影响。不单单是文件、或者内存存储影响。而且我认为.sqlite.只要不是单表几十万的数据量,影响不会太大。

首先从应用和设计上去优化一下,应用索引、关联、试图、数据建模要关注单标数据量的分切。

其次、编码层面的优化,注意编码中性能的损耗。比如.避免全表扫描、查询最好应用索引字段等.

最后,在使用sqlite、和代码编写层次没有太大的改观的情况下,尝试内存存储。

收获园豆:10
邢少 | 园豆:10926 (专家六级) | 2013-12-27 09:17

谢谢你的建议,现在的问题是 单表数据量也不小了,主要想尝试一下 看看内存数据库读取效率能否提高得比较明显,如果有这方面的代码,烦请贴一点给我,谢谢了

支持(0) 反对(0) 飞扬Design | 园豆:58 (初学一级) | 2013-12-27 09:22

@飞扬Design: 我也只是知道可以这么做,同时有c++之前使用内存存储的,c#的没有用过,持续关注答案。google一下吧.应该不少

支持(0) 反对(0) 邢少 | 园豆:10926 (专家六级) | 2013-12-27 09:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册