第一步:先创建一个DBhepler类,作为连接数据库中心,这个不过多说明,单纯作为数据库的连接...........

 1    public static string Constr = "数据库连接字符串";
2 public static DataTable Select(string sql, SqlParameter[] sp)
3 {
4 using (SqlConnection conn = new SqlConnection(Constr))
5 {
6 conn.Open();
7 DataTable dt = new DataTable();
8 SqlCommand cmd = new SqlCommand(sql, conn);
9 if (sp != null)
10 {
11 cmd.CommandType = CommandType.StoredProcedure;
12 cmd.Parameters.AddRange(sp);
13
14 }
15
16 SqlDataAdapter sdr = new SqlDataAdapter(cmd);
17 sdr.Fill(dt);
18 conn.Close();
19 return dt;
20 }
21
22 }

第二步:将读取的DataTable,数据信息转换为List

 1    public static IList<T> TableToListModel<T>(DataTable dt)
2 where T : new()
3 {
4
5
6 IList<T> ts = new List<T>();// 定义集合
7
8 foreach (DataRow dr in dt.Rows)
9 {
10
11 lock (obj_Lock)//就给锁住,注意这里是要加锁的,虽然我执行的时候没加锁,也成功了,但还是要加上............具体原因,你猜....
12 {
16 T t = new T();
17 PropertyInfo[] propertys = t.GetType().GetProperties();// 获得此模型的公共属性
18 foreach (PropertyInfo pi in propertys)
19 {
20 //获取属性名称
21 String name = pi.Name;
22 if (dr.Table.Columns.Contains(name))
23 {
24 //非泛型
25 if (!pi.PropertyType.IsGenericType)
26 {
27 pi.SetValue(t, string.IsNullOrEmpty(dr[name].ToString()) ? null : Convert.ChangeType(dr[name], pi.PropertyType), null);
28 }
29 //泛型Nullable<>
30 else
31 {
32 Type genericTypeDefinition = pi.PropertyType.GetGenericTypeDefinition();
33 //model属性是可为null类型,进行赋null值
34 if (genericTypeDefinition == typeof(Nullable<>))
35 {
36 //返回指定可以为 null 的类型的基础类型参数
37 pi.SetValue(t, string.IsNullOrEmpty(dr[name].ToString()) ? null : Convert.ChangeType(dr[name], Nullable.GetUnderlyingType(pi.PropertyType)), null);
38 }
39 }
40 }
41 }
42 ts.Add(t);
43
44 }
45 }
46 return ts;
47 }

第三步 :为了能够将代码打印出来,,更好的展示效果,我试图用以下方法展示

        public static IList<GHXX> zhuanhaun(string sql)
{
DataTable dt = DBHelper.Select(sql, null); IList<GHXX> gHXXes = TableToListModel<GHXX>(dt); return gHXXes;
} public static void showlist(string sql, int index)
{
IList<GHXX> gHXXes = zhuanhaun(sql);
for (int i = 0; i < gHXXes.Count; i++)
{
Console.WriteLine("序号:{0},我来自第{1}个线程,编号:{2},类别:{3},门诊编号:{4},姓名:{5}", i, index, gHXXes[i].MENZH, gHXXes[i].LEIB
, gHXXes[i].MENZKS, gHXXes[i].XINGM);
} }

第四步:接下来就是启动线程执行了

 1             Stopwatch sw = new Stopwatch();
2 sw.Start();
3 string sql1 = " 查询的SQL1";
4 string sql2 = "";
5 string sql3 = "";
6 string sql4 = "";
7
8
9 TaskFactory taskFactory = new TaskFactory();
10 List<Task> taskList = new List<Task>();
//我开启了四个线程执行
11 taskList.Add(taskFactory.StartNew(() =>
12 {
13 showlist(sql1, 1);
14 }));
15
16 taskList.Add(taskFactory.StartNew(() =>
17 {
18 showlist(sql2, 2);
19 }));
20 taskList.Add(taskFactory.StartNew(() =>
21 {
22 showlist(sql3, 3);
23 }));
24 taskList.Add(taskFactory.StartNew(() =>
25 {
26 showlist(sql4, 4);
27 }));
28
29
30 sw.Stop();
31 TimeSpan ts2 = sw.Elapsed;
33 Task.WaitAny(taskList.ToArray());//也可以限时等待
34 Console.WriteLine("其中一个线程执行完毕....");
35
36
37 Task.WaitAll(taskList.ToArray());
38 Console.WriteLine("线程全部执行完成,运行时间:" + ts2.TotalMilliseconds);

所以就好了..............

然后执行

开启四个线程查询8000条数据,耗时如图所示

没用启用线程执行,耗时:

使用.net Core 3.1 多线程读取数据库的更多相关文章

  1. SQL 横转竖 、竖专横 (转载) 使用Dapper.Contrib 开发.net core程序,兼容多种数据库 C# 读取PDF多级书签 Json.net日期格式化设置 ASPNET 下载共享文件 ASPNET 文件批量下载 递归,循环,尾递归 利用IDisposable接口构建包含非托管资源对象 《.NET 进阶指南》读书笔记2------定义不可改变类型

    SQL 横转竖 .竖专横 (转载)   普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 ...

  2. Java多线程读取大文件

    前言 今天是五一假期第一天,按理应该是快乐玩耍的日子,但是作为一个北漂到京师的开发人员,实在难想出去那玩耍.好玩的地方比较远,近处又感觉没意思.于是乎,闲着写篇文章,总结下昨天写的程序吧. 昨天下午朋 ...

  3. sqlite:多线程操作数据库“database is locked”解决方法(二)

    上一篇博客<sqlite:多线程操作数据库“database is locked”解决方法>通过注册延时函数的方法来处理数据库被锁的问题.此方法固然能解决问题,但是在多个线程向数据库写入大 ...

  4. 学习ASP.NET Core Razor 编程系列六——数据库初始化

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  5. asp.net core系列 31 EF管理数据库架构--必备知识 反向工程

    一.   反向工程 反向工程是基于数据库架构,生成的实体类和DbContext类代码的过程,对于Visual Studio开发,建议使用PMC.对于其他开发环境,请选择.NET Core CLI工具( ...

  6. .NET Core在类库中读取配置文件appsettings.json

    在.NET Framework框架时代我们的应用配置内容一般都是写在Web.config或者App.config文件中,读取这两个配置文件只需要引用System.Configuration程序集,分别 ...

  7. spring读取数据库的配置信息(url、username、password)时的<bean>PropertyPlaceholderConfigurer的用法

    用法1: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://w ...

  8. C# 中一些类关系的判定方法 C#中关于增强类功能的几种方式 Asp.Net Core 轻松学-多线程之取消令牌

    1.  IsAssignableFrom实例方法 判断一个类或者接口是否继承自另一个指定的类或者接口. public interface IAnimal { } public interface ID ...

  9. codeigniter读取数据库的公共配置并全局缓存的实现方案

    引言 学习CodeIgniter大概有几天了.从第一天了解后,对CI情有独钟,比较符合我的风格.其实一直以来对框架这块不太敏感.自己长时间的开发,也有一套自己的开发风格和习惯.但是这年头,你说你不会框 ...

随机推荐

  1. Django(48)drf请求模块源码分析

    前言 APIView中的dispatch是整个请求生命过程的核心方法,包含了请求模块,权限验证,异常模块和响应模块,我们先来介绍请求模块 请求模块:request对象 源码入口 APIView类中di ...

  2. CUDA 8混合精度编程

    CUDA 8混合精度编程 Mixed-Precision Programming with CUDA 8 论文地址:https://devblogs.nvidia.com/mixed-precisio ...

  3. spring 声明式事务剖析

    spring事务是在数据库事务的基础上进行封装扩展, 支持原有事务的隔离级别, 加入了事务传播的概念,提供多个事务合并和分割的功能, 提供声明式事务,让事务和业务代码分开 spring提供了三个接口供 ...

  4. mybatis 实现增删改查(CRUD)

    如何创建项目,注入依赖,编写核心配置文件.工具类.实体类这里就不详细说了,具体可以参考下边这条博文 https://www.cnblogs.com/bear7/p/12491937.html 这里将详 ...

  5. UiPath中恢复依赖项失败的解决方法

    目录 序言 正文 什么是依赖包? 如何查看项目使用了哪些版本的依赖包? 一.项目内查看 二.查看项目的 JSON 文件 问题根源 解决方法 一.「等」字诀 二.切换网络环境(根治) 三.手动复制依赖包 ...

  6. 【题解】 hdu2955 Robberies

    有抱负的罗伊·劫匪已经看过很多美国电影,他知道坏人通常会被抓住,经常是因为他们太贪心了.他决定在银行抢劫案中工作一段时间,然后退休后到一所大学从事一份舒适的工作. 题目: 罗伊去几个银行偷盗,他既想多 ...

  7. StringUtils中的常量

    //空格字符串 public static final String SPACE = " "; //空字符串 public static final String EMPTY = ...

  8. Sublime Text 4 破解笔记

    Sublime Text 4 破解笔记 偶然看到Sublime已经更新到版本4了,多了许多很nice的新特性,例如: 船新 UI 感知上下文的自动补全 支持 TypeScript, JSX 和 TSX ...

  9. Golang通过结构体解析和封装XML

    Golang解析和封装XML 解析XML成结构体Demo package main import ( "encoding/xml" "fmt" ) //我们通过 ...

  10. Linux基本命令精讲

    一.Shell Linux系统中运行的一种特殊程序 在用户和内核之间充当"翻译官 用户登录 Linux系统时,自动加载一个 Shell程序 Bash是 LinuxShell系统中默认使用的程 ...