sqlite仅仅发生还烂的程序员

比方惦记SQL CE里面插入数据,我便直将多少插入进去:

1sqlite 1        public static void InsertIntoSqlCe()
2sqlite 2sqlite 3        sqlite 4{
3sqlite 5            for (int i=0;i<Count;i++)
4sqlite 6sqlite 7            sqlite 8{
5sqlite 9                SqlCeHelper.ExecuteNonQuery(insertData);
6sqlite 10            }
7sqlite 11        }

 

栽的数是:

sqlite 12sqlite 13安插的数码(每个插入200不成)
1sqlite 14const string insertData = @”insert into TestTable ([key],[value]) values (‘TestKey1′,’TestValue1’) “;
2sqlite 15const string insertDataWithTran = @”insert into TestTable ([key],[value]) values (‘TestKey2′,’TestValue2’)”;

老大喊程序慢,让优化一下.忽然间想起来以前看到同样首文章里说,插入多长长的数据用工作的言辞会赶紧不行多.立马写代码试验:

sqlite 16sqlite 17蕴含事务之插入

 1sqlite 18        public static void InsertIntoSqlCeWithTran()
 2sqlite 19sqlite 20        sqlite 21{
 3sqlite 22            using(SqlCeConnection conn=new SqlCeConnection(SqlCeHelper.ConnString))
 4sqlite 23sqlite 24            sqlite 25{
 5sqlite 26                conn.Open();
 6sqlite 27                SqlCeTransaction tran = conn.BeginTransaction();
 7sqlite 28
 8sqlite 29                for (int i = 0; i < Count; i++)
 9sqlite 30sqlite 31                sqlite 32{
10sqlite 33                    SqlCeHelper.ExecuteNonQuery(tran, insertDataWithTran);
11sqlite 34                }
12sqlite 35
13sqlite 36                tran.Commit();
14sqlite 37            }
15sqlite 38        }

同样测试,立马发现效率大不一样:

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

故工作插入:   915.7294ms,不至1s,有时候测试会稍为微多余1s之.

看得出用工作插入效率高多,单次插入在沿上面的花巨大………..

 

 闲暇之衍,顺手测试了转sqlite的频率:

粗略的插入:

1sqlite 39        public static void InsertIntoSqlite()
2sqlite 40sqlite 41        sqlite 42{
3sqlite 43            for (int i = 0; i < Count;i++ )
4sqlite 44sqlite 45            sqlite 46{
5sqlite 47                SqliteHelper.ExecuteNonQuery(insertData);
6sqlite 48            }
7sqlite 49        }

 

含蓄事务之插入:

sqlite 50sqlite 51sqlite上面用工作插入
 1sqlite 52        public static void InsertIntoSqliteWithTran()
 2sqlite 53sqlite 54        sqlite 55{
 3sqlite 56            using (SQLiteConnection conn = new SQLiteConnection(SqliteHelper.ConnString))
 4sqlite 57sqlite 58            sqlite 59{
 5sqlite 60                conn.Open();
 6sqlite 61                SQLiteTransaction tran = conn.BeginTransaction();
 7sqlite 62
 8sqlite 63                for (int i = 0; i < Count; i++)
 9sqlite 64sqlite 65                sqlite 66{
10sqlite 67                    SqliteHelper.ExecuteNonQuery(tran, insertDataWithTran);
11sqlite 68                }
12sqlite 69
13sqlite 70                tran.Commit();
14sqlite 71            }
15sqlite 72        }

 

运行时:

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

事情插入:245.404ms(非常大胆啊).

 

RT.没有最好烂的程序员,只有更烂的程序员. 这半上写WM程序算是体会至了.

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上面的消耗.

专程感谢: 戚应杰 TX,指出本文错误的处在.

 

网站地图xml地图