SQLite速度评测代码
批量插入1000条记录。
今天有个朋友测试 SQLite,不好的代码效率差的不是一点半点,那么原代码 1000 次插入起码开启了 1000 个事务,我加几行代码 (新增代码标记 // -------------------),耗时 0.2 秒,居然耗时 2 分钟! 下面是他发给我的测试代码, using System.Data; using System.Data.Common; using System.Data.SQLite; // 创建数据库文件 File.Delete(test1.db3); SQLiteConnection.CreateFile(test1.db3); DbProviderFactory factory = SQLiteFactory.Instance; using (DbConnection conn = factory.CreateConnection()) { // 连接数据库 conn.ConnectionString = Data Source=test1.db3; conn.Open(); // 创建数据表 string sql = create table [test1] ([id] INTEGER PRIMARY KEY,其实这是数据库操作的基本常识,我晕~~~~~~ using System.Data; using System.Data.Common; using System.Data.SQLite; // 创建数据库文件 File.Delete(test1.db3); SQLiteConnection.CreateFile(test1.db3); DbProviderFactory factory = SQLiteFactory.Instance; using (DbConnection conn = factory.CreateConnection()) { // 连接数据库 conn.ConnectionString = Data Source=test1.db3; conn.Open(); // 创建数据表 string sql = create table [test1] ([id] INTEGER PRIMARY KEY,SQLite 缺省为每个操作启动一个事务,事务开启 + SQL 执行 + 事务关闭 自然耗费了大量的时间,这也是后面显示启动事务后为什么如此快的原因, ,大家要紧记, [s] TEXT COLLATE NOCASE); DbCommand cmd = conn.CreateCommand(); cmd.Connection = conn; cmd.CommandText = sql; cmd.ExecuteNonQuery(); // 添加参数 cmd.Parameters.Add(cmd.CreateParameter()); // 开始计时 Stopwatch watch = new Stopwatch(); watch.Start(); // 连续插入1000条记录 for (int i = 0; i 1000; i++) { cmd.CommandText = insert into [test1] ([s]) values (?); cmd.Parameters[0].Value = i.ToString(); cmd.ExecuteNonQuery(); } // 停止计时 watch.Stop(); Console.WriteLine(watch.Elapsed); } 哎~~~~ 一个常识性的错误。
这差距是不是太大了点? 为什么只是简单启用了一个事务会有这么大的差距呢?很简单, [s] TEXT COLLATE NOCASE); DbCommand cmd = conn.CreateCommand(); cmd.Connection = conn; cmd.CommandText = sql; cmd.ExecuteNonQuery(); // 添加参数 cmd.Parameters.Add(cmd.CreateParameter()); // 开始计时 Stopwatch watch = new Stopwatch(); watch.Start(); DbTransaction trans = conn.BeginTransaction(); // ------------------- try { // 连续插入1000条记录 for (int i = 0; i 1000; i++) { cmd.CommandText = insert into [test1] ([s]) values (?); cmd.Parameters[0].Value = i.ToString(); cmd.ExecuteNonQuery(); } trans.Commit(); // ------------------- } catch { trans.Rollback(); // ------------------- throw; // ------------------- } // 停止计时 watch.Stop(); Console.WriteLine(watch.Elapsed); } 执行一下,然后得出的结论是:SQLite 效率太低,。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/sql/sqlite/10030.shtml
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
Androidsqlite增删改查基本运
时间:2020-12-29
-
Android数据存储(一)SQL
时间:2020-12-29
-
iOS开发数据库SQLite的使用
时间:2020-12-29
-
Android数据存储(三) SQ
时间:2020-12-29
-
SQLite数据库与Contentprovid
时间:2020-12-29
-
SQLite数据库管理系统-我所
时间:2020-12-28
-
SQLite数据库常用语句及M
时间:2020-12-24
-
sQlite常用语句以及sQlite
时间:2020-12-24
热门文章
-
sQlite常用语句以及sQlite developer的使用与注
时间:2020-12-24
-
SQLite数据库管理系统-我所认识的数据库引
时间:2020-12-28
-
Androidsqlite增删改查基本运用
时间:2020-12-29
-
Android数据存储(一)SQLite
时间:2020-12-29
-
iOS开发数据库SQLite的使用
时间:2020-12-29
-
Android数据存储(三) SQLite数据库存储
时间:2020-12-29
-
SQLite数据库常用语句及MAC上的SQLite可视化
时间:2020-12-24
-
SQLite教程(一):SQLite数据库介绍
时间:2020-12-24
-
SQLite数据库与Contentprovider(2)
时间:2020-12-29
