首页 / 大数据 / Sqlite大数据写入性能优化
Sqlite大数据写入性能优化
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Sqlite大数据写入性能优化,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3198字,纯文字阅读大概需要5分钟。
内容图文
![Sqlite大数据写入性能优化](/upload/InfoBanner/zyjiaocheng/484/abd4f23a327242da952b7bcb0c1ed3e4.jpg)
从上面的代码看来,我没有进行任何优化工作,我用这种方式插入了1万条数据用了1分多钟,可见优化的重要性(百万级数据跑起来...不敢想象)。
开启事务:
1 StringBuilder sql = new StringBuilder(); 2 sql.Append("BEGIN;");//开启事务 3 foreach (DataRow dr in dt.Rows) 4 { 5 sql.Append("INSERT INTO Info (Name,Code) VALUES(‘"+dr[0]+"‘,‘"+dr[1]+"‘) \r\n"); 6 } 7 sql.Append("COMMIT;");//提交事务 8 sqlHelper.SqliteHelper.ExecuteNonQuery( sql.ToString(), CommandType.Text);View Code
由于sqlite的数据操作实质上是对于其数据文件的IO操作,频繁的插入数据会导致文件IO经常开闭,非常损耗性能能。事务作用便是使数据先缓存在系统中,提交事务时便提交所有的更改到数据文件,此时数据文件的IO只需要开闭一次,且避免了长期占用文件IO所导致性能低下的问题。此时,开启事务处理后性能上虽然有了大幅度的提升,但是结果仍旧不理想,哪还有什么在影响着性能呢?下面尝试开启预处理来解决问题。
开启预处理:
1 public static int ExecuteNonQuery(string commandText, CommandType commandType) 2 { 3 int result = 0; 4 if (commandText == null || commandText.Length == 0) 5 throw new ArgumentNullException("sql语句为空"); 6 using (SQLiteConnection con = new SQLiteConnection(connectionString)) 7 { 8 SQLiteCommand cmd = new SQLiteCommand(); 9 cmd.Connection = con; 10 cmd.CommandText = commandText; 11 cmd.Prepare();//开启预处理 12 try 13 { 14 result = cmd.ExecuteNonQuery(); 15 } 16 catch (Exception ex) 17 { 18 throw ex; 19 } 20 } 21 return result; 22 } 23View Code
预处理的原理就是将一条语句先预编译到数据库,下次再次执行相同的语句时,就不用再次编译,节省了大量的时间。由此看来,代码似乎还没有优化完成。就第一版代码来说,由于批量插入的数据不尽相同,所以数据库会多次编译插入语句,性能会损耗非常多,也就造成插入需要的时间会比较多。有没有一条语句是可以循环使用的?答案是有的,使用参数化传值,就能使每一次的插入的sql语句都是相同的。
参数化(数据库帮助类那边我就不写了):
1 StringBuilder sql = new StringBuilder(); 2 SQLiteParameter[] sp = new SQLiteParameter[2]; 3 foreach (DataRow dr in dt.Rows) 4 { 5 sql.Clear(); 6 sql.Append("INSERT INTO Info (Name,Code) VALUES(@Name,@Code) \r\n"); 7 sps[0] = new SQLiteParameter("@p1", dr["Name"]); 8 sps[1] = new SQLiteParameter("@p2", dr["Code"]); 9 sqlHelper.SqliteHelper.ExecuteNonQuery(sql.ToString(),sp, CommandType.Text); 10 }View Code
经过一系列优化处理后,插入1万条数据只需要不到1秒,性能得到了极大的提升。
另外,本人新手,如有不对,望不吝指教。
Sqlite大数据写入性能优化
标签:ons cmd exception 事务处理 res 预编译 传值 public lex
本文系统来源:http://www.cnblogs.com/yisen-code/p/6897524.html
内容总结
以上是互联网集市为您收集整理的Sqlite大数据写入性能优化全部内容,希望文章能够帮你解决Sqlite大数据写入性能优化所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。