【连接池】.NET开源 ORM 框架 SqlSugar 系列

news2025/3/20 9:33:16

 .NET开源 ORM 框架 SqlSugar 系列

  1. 【开篇】.NET开源 ORM 框架 SqlSugar 系列
  2. 【入门必看】.NET开源 ORM 框架 SqlSugar 系列
  3. 【实体配置】.NET开源 ORM 框架 SqlSugar 系列
  4. 【Db First】.NET开源 ORM 框架 SqlSugar 系列
  5. 【Code First】.NET开源 ORM 框架 SqlSugar 系列
  6. 【数据事务】.NET开源 ORM 框架 SqlSugar 系列
  7. 【连接池】.NET开源 ORM 框架 SqlSugar 系列-CSDN博客

1. ADO.NET 连接池

如何启用和禁用连接池❓

连接字符串中将连接池值 Pooling 设置为 true 或 yes,则会启用连接池(默认启用)。

启用后连接池后系统会根据并发情况将连接池保持在一个合理区间,让性能最大化,并不会立马清空。而是将他状态更改为sleep。禁用连接池性能会差一些,open就打开连接池 close就关闭连接池。

1.1 Open() 

1、启用连接池情况(默认)

先找有没有睡眠的连接池有恢复连接池,如果没有睡眠的连接池打开新的连接池

2、禁用连接池情况(需要字符串关闭)

打开新连接池

1.2 Close ()

1、启用连接池情况(默认)

将现有连接池睡眠

2、禁用连接池情况(需要字符串关闭)

关闭连接池

1.3 dispose()

方法实际是和 close()做的同一件事,唯一区别是 dispose 会销毁当前C#对象

SqlSugar dispose后在打开不会报错,原理如下:

 var db = GetInstance();
  db.Open();
  Console.WriteLine(db.Ado.Connection.GetHashCode());
  db.Close();
  Console.WriteLine(db.Ado.Connection.GetHashCode());
  db.Dispose();
  //如果下次在使用db会new出新的SqlConnection和Ado.net不一样Ado.net是直接报错
  Console.WriteLine(db.Ado.Connection.GetHashCode());

输出结果如下:

image.png

唯一的区别是Dispose后在使用db,db对象会换成新的而不在是以前的,而close后在使用还是同一个db对象。

2、SqlConnection和连接池

SqlConnection 非线程安全对象,不同上下文要new不同对象

con.Open(); //请求数据库连接池 查找有没有 sleep 状态的,没有创建连接池
con.Close();//将当前连接池状态改为sleep , 如果长时间不用会销毁

上面的原理可以看出

1. 同一个对象多次 open 和 close 都是在现有的连接池里面去操作

2. 就算是多个SqlConnection不在同时间请求,也可能会用同一个连接池 

3.多个SqlConnection 并发操作会找有没有空闲的连接池,没有在创建

所以连接池在.NET中 微软封装的很好,很成熟 多数.NET用户都不知道是什么玩意儿。

连接超时设置

在连接池符串加上 Connection Timeout=10  ,默认是30秒,单位秒

.NET中要配置连接池吗

 答:什么都不用配置只要学会 open 和 close就行了 

3、SqlSugarClient原理

1.手动释放模式和SqlConnection原理一模一样,底层就是用的SqlConnection并且需要注意线程安全

//创建数据库对象 SqlSugarClient   
 SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
 {
            ConnectionString = "Server=.xxxxx", 
            DbType = DbType.SqlServer,
            IsAutoCloseConnection = false//手动释放  是长连接 
 });
 //需要手动using 
 //或者
 //db.Open();
 //db.Close();

2.自动释放(推荐),说白了不需要你去写 using 或者 close和open


//创建数据库对象 SqlSugarClient   
 SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
 {
            ConnectionString = "Server=.xxxxx", 
            DbType = DbType.SqlServer,
            IsAutoCloseConnection = true//自动释放
 });
 //写代码就不需要考虑 open close 直接用就行了

 情况1: 没有事务的情况 ,每次操作自动调用 open和close

 情况2: 有事务的情况下 ,开启事务调用 open  提交或者回滚事务调用 close

4、SqlSugarScope原理

它是对 SqlSugarClient 的封装让他支持线程安全,并且在不同上下文自动new 出 SqlSugarClient,在编写代码的时候不需要考虑他线程是否安全

什么是上下文

异步情况: 在同一串await 中是一个上下文

同步情况: 在同一个线程是同一个上下文

同一个SqlSugarScope 做到了在同一个上下文共享一个对象,不同上下文自动去NEW

5、如何验证是否释放

默认情况下只要超过100个请求没关闭就会报错,不同库可能有差异

         for (int i = 0; i < 501; i++)
         {
                SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
                {
                    DbType = DbType.Oracle,
                    ConnectionString = Config.ConnectionString,
                    IsAutoCloseConnection = false//设成关闭这个代码会直接报错
                });
 
                db.Ado.GetInt("SELECT 1 from dual"); 
           }
 //IsAutoCloseConnection=true 执行成功
 //IsAutoCloseConnection=false 会出现连接池超时或者超过上限等错误

6、总结

他们3者的关系应该是这样的:

  1. SqlSugarScope 底层+自动释放+上下文安全
  2. SqlSugarClient  底层+自动释放控制
  3. SqlConnection   底层

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2251402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《业务流程--穿越从概念到实践的丛林》读后感一:什么是业务流程

1.4 流程建模 画流程图常见的方法派别如下: 1)流图。美国国家标准协会(ANSI)制定的规范,利用VISIO中的流程符号进行画图。 2)事件驱动流程链(EPC)。ARIS(集成信息系统架构)。认为流程是由一系列事件触发,并且 针对事件的行为又将引发新的事件,流程的表现为“事件--功…

Sybase数据恢复—Sybase数据库无法启动,Sybase Central连接报错的处理案例

Sybase数据库数据恢复环境&#xff1a; Sybase数据库版本&#xff1a;SQL Anywhere 8.0。 Sybase数据库故障&分析&#xff1a; Sybase数据库无法启动。 错误提示&#xff1a; 使用Sybase Central连接报错。 数据库数据恢复工程师经过检测&#xff0c;发现Sybase数据库出现…

redis基础spark操作redis

Redis内存淘汰策略 将Redis用作缓存时&#xff0c;如果内存空间用满&#xff0c;就会自动驱逐老的数据。 为什么要使用内存淘汰策略呢&#xff1f; 当海量数据涌入redis&#xff0c;导致redis装不下了咋办&#xff0c;我们需要根据redis的内存淘汰策略&#xff0c;淘汰一些不那…

C++学习日记---第14天(蓝桥杯备赛)

笔记复习 1.对象的初始化和清理 对象的初始化和清理是两个非常重要的安全问题&#xff0c;一个对象或者变量没有初始状态&#xff0c;对其使用后果是未知&#xff0c;同样的使用完一个对象或者变量&#xff0c;没有及时清理&#xff0c;也会造成一定的安全问题 构造函数&…

Unity ShaderLab 实现3D物体描边

实现思路&#xff1a; 给物体添加第二个材质球&#xff0c;在shader的顶点着色器中使顶点的位置变大&#xff0c;然后在片元着色器中输出描边颜色。 shader Graph实现如下&#xff1a; ShaderLab实现如下&#xff1a; Shader "Custom/Outline" {Properties{[HDR]_…

【HarmonyOS NEXT】ACL 受限权限申请

关键词&#xff1a;受限开放权限、ACL、鸿蒙 在鸿蒙应用开发过程中&#xff0c;部分权限被受到限制&#xff08;如悬浮窗开发、读取联系人数据、读取公共目录音频文件等权限&#xff09;&#xff0c;但是在我们的应用开发过程中又不得不使用该权限时可向华为申请受限权限&#…

南京仁品耳鼻喉专科医院:12月启动公益义诊月

专业医疗资源送至“家门口”&#xff01;南京仁品耳鼻喉专科医院启动公益义诊月 随着2024年即将步入尾声&#xff0c;南京仁品耳鼻喉医院为回馈社会&#xff0c;提升公众健康福祉&#xff0c;将于12月隆重推出“三甲专家公益义诊月”活动。此次活动旨在通过汇聚众多耳鼻喉领域…

【UE5 C++课程系列笔记】06——定时器的基本使用

目标 使用定时器每秒调用函数打印一句日志信息&#xff0c;并在调用一定次数后停止定时器。 步骤 1. 新建一个Actor类&#xff0c;这里命名为 2. 先在“TimerActor.cpp”中获取定时器管理器 使用定时器管理器来设置定时器&#xff0c;该定时器在2s后启动&#xff0c;然后每…

数据分析的尽头是web APP?

数据分析的尽头是web APP&#xff1f; 在做了一些数据分析的项目&#xff0c;也制作了一些数据分析相关的web APP之后&#xff0c;总结自己的一些想法和大家分享。 1.web APP是呈现数据分析结果的另外一种形式。 数据分析常见的结果是数据分析报告&#xff0c;可以是PPT或者…

看不见的彼方:交换空间——小菜一碟

有个蓝色的链接&#xff0c;先去看看两年前的题目的write up &#xff08;https://github.com/USTC-Hackergame/hackergame2022-writeups/blob/master/official/%E7%9C%8B%E4%B8%8D%E8%A7%81%E7%9A%84%E5%BD%BC%E6%96%B9/README.md&#xff09; 从别人的write up中了解到&…

以达梦为数据库底座时部署的微服务页面报乱码,调整兼容模式

1.问题描述 部署微服务&#xff0c;文件、代码是延用的mysql类型的&#xff0c;部署前做了部分适配&#xff0c;但是在使用dm数据库进行安装的服务在页面上查询出的数据却都是乱码 2.查询官网&#xff0c;注意到一个参数COMPATIBLE_MODE兼容模式的配置 考虑是延用mysql&…

K2升班卷(C++ 3道题)

目录 1.匹配 题目背景 题目描述 输入格式 输出格式 输入输出样例 说明/提示 样例 1 解释 数据规模与约定 提示 2.乘方 题目描述 输入格式 输出格式 输入输出样例 数据规模与约定 3.缺水的王国 题目描述 输入格式 输出格式 输入输出样例 说明/提示 样例解…

Redis(4):主从复制

一、主从复制概述 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(master)&#xff0c;后者称为从节点(slave)&#xff1b;数据的复制是单向的&#xff0c;只能由主节点到从节点。   默认情况下&#xff0c;每台Redis…

Educator头歌:离散数学 - 图论

第1关&#xff1a;图的概念 任务描述 本关任务&#xff1a;学习图的基本概念&#xff0c;完成相关练习。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;图的概念。 图的概念 1.一个图G是一个有序三元组G<V,R,ϕ>&#xff0c;其中V是非空顶点集合&am…

linux模拟HID USB设备及wireshark USB抓包配置

文章目录 1. 内核配置2. 设备配置附 wireshark USB抓包配置 linux下模拟USB HID设备的简单记录&#xff0c;其他USB设备类似。 1. 内核配置 内核启用USB Gadget&#xff0c;使用fs配置usb device信息。 Device Drivers ---> [*] USB support ---><*> USB …

Trimble X12助力电力管廊数据采集,为机器人巡视系统提供精准导航支持

地下电缆是一个城市重要的基础设施&#xff0c;它不仅具有规模大、范围广、空间分布复杂等特点&#xff0c;更重要的是它还承担着信息传输、能源输送等与人们生活息息相关的重要功能&#xff0c;也是一个城市赖以生存和发展的物质基础。 01、项目概述 本次项目是对某区域2公里左…

Mybatis:CRUD数据操作之多条件查询及动态SQL

Mybatis基础环境准备请看&#xff1a;Mybatis基础环境准备 本篇讲解Mybati数据CRUD数据操作之多条件查询 1&#xff0c;编写接口方法 在 com.itheima.mapper 包写创建名为 BrandMapper 的接口。在 BrandMapper 接口中定义多条件查询的方法。 而该功能有三个参数&#xff0c;…

嵌入式硬件实战基础篇(四)多路直流稳压电源

设计一个多路直流稳压电源 要求设计制作一个多路输出直流稳压电源,可将220 V / 5 0HZ交流电转换为5路直流稳压输出。具体要求&#xff1a; 输出直流电压 12V&#xff0c; 5V;和一路输出3- 15V连续可调直流稳压电源: 输出电流Iom500mA; 稳压系数 Sr≤0.05;

# MySql字符集报错

MySql报 java.sql.SQLException: Incorrect string value 乱码解决方法 文章目录 MySql报 java.sql.SQLException: Incorrect string value 乱码解决方法修改数据库字符集和排序规则检查数据库字符集和排序规则修改数据库字符集和排序规则&#xff08;谨慎操作&#xff09;修改…

CDAF / PDAF 原理 | PDAF、CDAF 和 LAAF 对比 | 图像清晰度评价指标

注&#xff1a;本文为 “CDAF / PDAF 原理 | PDAF、CDAF 和 LAAF 对比 | 图像清晰度评价指标” 几篇相关文章合辑。 文章中部分超链接异常、图片模糊限于引用原文原状。 相机自动对焦原理 TriumphRay 于 2020-01-16 18:59:41 发布 凸透镜成像原理 这一部分大家中学应该就学过…