SQLite.NET.0.17 的离奇之处, BUG??? BY DESIGN??
看了灵感之源 的blog, 我也下了看了下。碰到个离奇的事情,没有transaction的情况下比有要慢上好多倍。
在压缩包里,带了一个test的项目,里面几行是这样的,
IDbTransaction trans = conn.BeginTransaction();
for (int i = 0; i < count; ++i)
{
((IDataParameter) cmd.Parameters[0]).Value = "AaBbCc123";
if (i % 20 != 0)
((IDataParameter) cmd.Parameters[1]).Value = i;
else
((IDataParameter) cmd.Parameters[1]).Value = null;
((IDataParameter) cmd.Parameters[2]).Value = (i * 3.3).ToString();
((IDataParameter) cmd.Parameters[3]).Value = (Single) (i * 4.4);
cmd.ExecuteNonQuery();
}
trans.Commit();
当我把这里第一和最后一行注释掉后,结果让我无法理解
with transaction:
Inserting... 17127 inserts/sec
Reading... 47101 reads/sec
without transaction:
Inserting... 624 inserts/sec
Reading... 43041 reads/sec
另外,这个版本只是把pinvoke用C#调了,并没有改成pure .net 的项目,他还是依赖sqlite.dll的。
(我在.net 2.0下测试,不知道1.1 是不是一样)
在压缩包里,带了一个test的项目,里面几行是这样的,
IDbTransaction trans = conn.BeginTransaction();
for (int i = 0; i < count; ++i)
{
((IDataParameter) cmd.Parameters[0]).Value = "AaBbCc123";
if (i % 20 != 0)
((IDataParameter) cmd.Parameters[1]).Value = i;
else
((IDataParameter) cmd.Parameters[1]).Value = null;
((IDataParameter) cmd.Parameters[2]).Value = (i * 3.3).ToString();
((IDataParameter) cmd.Parameters[3]).Value = (Single) (i * 4.4);
cmd.ExecuteNonQuery();
}
trans.Commit();
当我把这里第一和最后一行注释掉后,结果让我无法理解
with transaction:
Inserting... 17127 inserts/sec
Reading... 47101 reads/sec
without transaction:
Inserting... 624 inserts/sec
Reading... 43041 reads/sec
另外,这个版本只是把pinvoke用C#调了,并没有改成pure .net 的项目,他还是依赖sqlite.dll的。
(我在.net 2.0下测试,不知道1.1 是不是一样)