SqlCe和SQLite的对比试验、结论

SqlCe和SQLite的对比试验、结论,第1张

概述前端时间做WINCE手持机应用时,用到了SQLCE,在SQL CE的数据流读写里头,我想插入数据,就直接把数据插入进去: 1        public static void InsertIntoSqlCe() 2        { 3            for (int i=0;i<Count;i++) 4            { 5                SqlCeHelper

前端时间做WINCE手持机应用时,用到了sqlCE,在sql CE的数据流读写里头,我想插入数据,就直接把数据插入进去:

1 public static voID InsertIntosqlCe()
2 {
3 for (int i=0;i<Count;i++)
4 {
5 sqlCeHelper.ExecuteNonquery(insertData);
6 }
7 }

结论是插入的数据(每个插入200次)
1 conststringinsertData=@"insertintoTesttable([key],[value])values('TestKey1','TestValue1')";
2conststringinsertDataWithTran=@"insertintoTesttable([key],[value])values('TestKey2','TestValue2')";

老大喊程序慢,让优化一下.忽然间想起来以前看到一篇文章里面说,插入多条数据用事务的话会快很多.立马写代码试验:

带有事务的插入
一测试,立马发现效率大不一样:

简单插入耗时:51422.969ms,大约50s,

用事务插入: 915.7294ms,不到1s,有时候测试会略微多余1s的.

可见用事务插入效率高很多,单次插入在锁上面的花费巨大...........


1 public static voID InsertIntosqlCeWithTran()
2 {
3 using(sqlCeConnection conn=new sqlCeConnection(sqlCeHelper.ConnString))
4 {
5 conn.open();
6 sqlCeTransaction tran = conn.BeginTransaction();
7
8 for (int i = 0; i < Count; i++)
9 {
10 sqlCeHelper.ExecuteNonquery(tran,insertDataWithTran);
11 }
12
13 tran.Commit();
14 }
15 }

闲暇之余,顺手测试了一下sqlite的效率:

简单的插入:

1 public static voID InsertIntosqlite()
2 {
3 for (int i = 0; i < Count;i++ )
4 {
5 sqliteHelper.ExecuteNonquery(insertData);
6 }
7 }

带有事务的插入:

sqlite上面用事务插入
1 public static voID InsertIntosqliteWithTran()
2 {
3 using (sqliteConnection conn = new sqliteConnection(sqliteHelper.ConnString))
4 {
5 conn.open();
6 sqliteTransaction tran = conn.BeginTransaction();
7
8 for (int i = 0; i < Count; i++)
9 {
10 sqliteHelper.ExecuteNonquery(tran,insertDataWithTran);
11 }
12
13 tran.Commit();
14 }
15 }

运行时间:

简单插入:22952.6452ms,约21s到22s.

事务插入:245.404ms(非常强悍啊).


RT.没有最烂的程序员,只有更烂的程序员.

PS: sql CE不是一般的烂,现在极其不想用sql CE了,版本众多,功能简单,部署困难....有机会的话用sqlite吧~~


PS:

1.这次加上主键

num Pk 自增,其他的不变,插入200条分别是47--55.7s和1.0--1.1s.

sqlite上面表也一样,插入200条数据分别是20--22s和270--310ms.

2.关于Update

通过主键update另外两个字段的值,update200次.

sql Ce 耗时为53850.4612--54642.9023ms和2103.0424--2188.6178ms.

sqlIE耗时为 14469.8865--15233.3454ms和181.2472--244.342ms.

注意,这些都为典型值,如果对性能有要求,可以多次测量估算平均值.


PS:特别订正:

1. 在sql ce上面,事务并不能提高程序的性能,反而会有降低.之所以之前的程序表现"良好",是因为事务的使用降低了

sqlConnection打开的时间消耗,在只用一个Connection的情况下,事务的的确确降低了程序的性能.这一点需要注意.

2. 在sqlite上面,怪异的事,事务反而提高的程序的性能.这就只能解释为,sqlite的锁消耗是非常大.据说sqlite的锁是用文件锁实现的,所以效率较低.......

3. 嵌入式数据库一般不存在并发问题,请在 *** 作的时候使用长连接形式访问数据库,减小Connection上面的消耗.

总结

以上是内存溢出为你收集整理的SqlCe和SQLite的对比试验、结论全部内容,希望文章能够帮你解决SqlCe和SQLite的对比试验、结论所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1175977.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存