要想SQL CE里面插入数据,我就一直把数据插入进去:
1 public static void InsertIntoSqlCe()
2
{
3 for (int i=0;i<Count;i++)
4
{
5 SqlCeHelper.ExecuteNonQuery(insertData);
6 }
7 }
插入的多少是:
插入的数据(每个插入200次)
1const string insertData = @”insert into TestTable ([key],[value]) values (‘TestKey1′,’TestValue1’) “;
2const string insertDataWithTran = @”insert into TestTable ([key],[value]) values (‘TestKey2′,’TestValue2’)”;
老大喊程序慢,让优化一下.忽然间想起来从前看到一篇小说里面说,插入多条数据用工作的话会快很多.立马写代码试验:
涵盖事务的插入
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 }
一测试,立马发现功用大不同:
不难插入耗时:51422.969ms,大概50s,
用工作插入: 915.7294ms,不到1s,有时候测试会略微多余1s的.
足见用工作插入功能高很多,单次插入在锁上面的开支巨大………..
闲暇之余,顺手测试了一下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.没有最烂的程序员,唯有更烂的程序员. 那两日写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:越发勘误:
- 在sql
ce上面,事务并不可以增进程序的性质,反而会有下落.之所以以前的次第表现”杰出”,是因为工作的施用下降了
SqlConnection打开的年华费用,在只用一个Connection的意况下,事务的的确确下降了程序的性能.那点亟待注意.
2.
在sqlite上面,怪异的事,事务反而提升的主次的性能.那就只可以解释为,sqlite的锁消耗是相当大.据说sqlite的锁是用
文件锁落成的,所以功能较低…….
3.
嵌入式数据库一般不存在并发问题,请在操作的时候利用长连接形式拜访数据库,减小Connection下边的消耗.
专程感谢: 戚应杰 TX,指出本文错误之处.