.NET 一次读取几百条数据优化,从原来30分钟优化到30秒
1、全部数据读取到内存,
不要使用string,而是使用stringbuilder,stringbuilder的效率非常高
2、添加到数据库
不要使用excute,而是使用事务,几百万条数据会请求数据库几百万次,而使用事务,只请求一次,速度提高几百万倍
string file = fileDialog.FileName;//返回文件的完整路径
SqliteHelper.ExecuteNonQuery("delete from BaseData");
StreamReader sr = new StreamReader(file, Encoding.Default);
string content;
StringBuilder sql = new StringBuilder();
int count = ;
int num = ;
DateTime starttime = DateTime.Now;
var a = sr.ReadToEnd();
List<string> resultList = a.Split('.').ToList();
List<BaseData> baseDatas = new List<BaseData>();
List<string> sqlString = new List<string>();
Thread thread = new Thread(() =>
{
foreach (var item in resultList)
{
var c = item.Replace("\r\n", "");
if (string.IsNullOrEmpty(c))
continue;
List<string> str =c .Split(',').ToList(); if (str.Count() > )
{
//Console.WriteLine(content.ToString());
// sql.AppendLine($"INSERT INTO BaseData ( ProductCode,XinHao,Sku) values ('{str[0]}','{str[1]}','{str[2]}');"); sqlString.Add($"INSERT INTO BaseData ( ProductCode,XinHao,Sku) values ('{str[0]}','{str[1]}','{str[2]}');");
num++;
// baseDatas.Add(new BaseData() { ProductCode = str[0], XinHao = str[1], Sku = str[2]});
//count++;
//label1.Text = $"{count}条"; //if (num % 5000 == 0)
//{
// //count += DapperHelper<BaseData>.insertDbBatch2(baseDatas);
// //count += DapperHelper<BaseData>.ExecuteTransaction(sqlString);
// count += DapperHelper<BaseData>.insertDbBatch3(sqlString);
// sqlString.Clear();
// sql.Clear();
// num = 0;
// baseDatas.Clear(); //}
DateTime endtime = DateTime.Now;
label2.Text = $"{(endtime - starttime).TotalSeconds}秒"; }
} if (sqlString.Any())
{ // count += SqliteHelper.ExecuteNonQuery(sql.ToString());
//count += DapperHelper<BaseData>.insertDbBatch(sql.ToString());
// count += DapperHelper<BaseData>.Execute(sql.ToString(),null); ;
count += DapperHelper<BaseData>.insertDbBatch3(sqlString);
DateTime endtime = DateTime.Now;
label2.Text = $"{(endtime - starttime).TotalSeconds}分";
if (count > )
MessageBox.Show("保存成功");
else
MessageBox.Show("保存失败");
}
});
thread.Start(); }
public static int insertDbBatch3(List<string> sqlList)
{ SQLiteConnection conn = new SQLiteConnection(connectionString);
conn.Open();
SQLiteCommand cmd = new SQLiteCommand(conn);
SQLiteTransaction trans = conn.BeginTransaction(); // <-------------------
cmd.Transaction = trans;
int cnt = ;
try
{ foreach (var sql in sqlList)
{
cmd.CommandText = sql;
cnt += cmd.ExecuteNonQuery();
} trans.Commit();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
} }
return cnt;
}
.NET 一次读取几百条数据优化,从原来30分钟优化到30秒的更多相关文章
- element ui 渲染超过上百条数据时页面卡顿,更流畅的加载大量数据
问题:element ui table渲染上百条数据,页面渲染开始出现延时 解决方案:使用pl-table 注意:设置use-virtual并给定table高度
- Java 线程池 +生产者消费者+MySQL读取300 万条数据
1.1需求 数据库300 万条用户数据 ,遍历获取所有用户, 各种组合关联, 获取到一个新的json ,存到redis 上. 1.2 难点 数据库比较多, 不可能单线程查询所有的数据到内存. 1.3解 ...
- 极限挑战—C#+ODP 100万条数据导入Oracle数据库仅用不到1秒
链接地址:http://www.cnblogs.com/armyfai/p/4646213.html 要:在这里我们将看到的是C#中利用ODP实现在Oracle数据库中瞬间导入百万级数据,这对快速批量 ...
- JAVA从文本文件(txt)读取一百万条数据保存到数据库
Java读取大文本文件保存到数据库 1.追求效率 将文件读取到内存,效率比较高,经过测试读取1G左右的文本文件,机器内存消耗达到接近3个G,对内存消耗太大,不建议使用 2.通过调用第三方类库实现 通过 ...
- php使用cvs导出百万条数据,大量数据
MySQL CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) NOT NULL DEFAUL ...
- 转: 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- jdbc读取百万条数据出现内存溢出的解决办法
本人在做项目实施时,我们使用的是mysql数据库,在不到一个月的时间已经有了2千万条数据,查询的时候非常慢,就写了一个数据迁移的小项目,将这两千万条数据存放到MongoDB中看效率怎么样,再读取数据时 ...
- 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条
SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条 SELECT Id,[Title],[Content],[Image] FROM ( SELECT ROW_NUMBER( ...
随机推荐
- Write-up-Toppo
关于 下载地址:点我 哔哩哔哩:哔哩哔哩 信息收集 vmnet8网卡,IP:192.168.131.144,开放web,ssh服务 ➜ ~ ip a show dev vmnet8 5: vmnet8 ...
- Jmeter JDBC配置
前提条件,驱动包mysql-connector-java-5.1.38-bin.jar要放到本机Java路径:C:\Program Files\Java\jdk1.8.0_73\jre\lib\ext ...
- 高手教大家如何配置JVM参数
/usr/local/jdk/bin/java -Dresin.home=/usr/local/resin -server -Xms1800M -Xmx1800M -Xmn300M -Xss512K ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:为按钮添加基本样式
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 【转载】C#常用控件属性及方法介绍
C#常用控件属性及方法介绍 目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文 ...
- nginx 安装部署前篇
官网:https://nginx.org/ 特性:既可以作为HTTP服务器,也可以作为反向代理服务器或者邮件服务器或者邮件服务器:能够快递响应静态页面的请求:支持 Fast CGI.SSL.Virtu ...
- mysql数据库的索引类型
MySQL索引类型: 1.普通索引 最基本的索引,它没有任何限制,用于加速查询. 创建方法: a. 建表的时候一起创建 CREATE TABLE mytable ( name VARCHAR(32 ...
- SSH框架系列:Spring AOP应用记录日志Demo
分类: [java]2013-12-10 18:53 724人阅读 评论(0) 收藏 举报 1.简介 Spring 中的AOP为Aspect Oriented Programming的缩写,面向切面编 ...
- UGUI崭新崭新的新手
------------------------------------------------------------------------------------1--------------- ...
- 201706 gem 'rails-erd'生成Model关系图
[工具]一张图理清各个model之间关系 安装 Graphviz 2.22+: 终端机中执行 brew install graphviz Gemfile中添加 gem 'rails-erd' 终端机中 ...