SqlConnection 的连接池机制解析
提供一篇关于sqlconnection连接池详细,有需要的朋友参考一下。
物理连接建立时,需要做和服务器握手,解析连接字符串,授权,约束的检查等等操作,而物理连接建立后,这些操作就不会去做了。这些操作是需要一定的时间的。所以很多人喜欢用一个静态对象存储 SqlConnection 来始终保持物理连接,但采用静态对象时,多线程访问会带来一些问题,实际上,我们完全不需要这么做,因为 SqlConnection 默认打开了连接池功能,当程序 执行 SqlConnection.Close 后,物理连接并不会被立即释放,所以这才出现当循环执行 Open操作时,执行时间几乎为0.
下面我们先看一下不打开连接池时,循环执行 SqlConnection.Open 的耗时
代码如下 | 复制代码 |
public static void OpenWithoutPooling() Stopwatch sw = new Stopwatch(); sw.Start(); sw.Stop(); sw.Reset(); sw.Start(); for (int i = 0; i
{ sw.Stop();
|
SqlConnection 默认是打开连接池的,如果要强制关闭,我们需要在连接字符串中加入 Pooling=False
调用程序如下:
代码如下 | 复制代码 |
Test.SqlConnectionTest.OpenWithoutPooling(); Console.WriteLine("Waiting for 10s"); System.Threading.Thread.Sleep(10 * 1000); Test.SqlConnectionTest.OpenWithoutPooling(); Console.WriteLine("Waiting for 600s"); System.Threading.Thread.Sleep(600 * 1000); Test.SqlConnectionTest.OpenWithoutPooling(); |
下面是测试结果
Without Pooling, first connection elapsed 13 ms
Without Pooling, average connection elapsed 5 ms
Wating for 10s
Without Pooling, first connection elapsed 6 ms
Without Pooling, average connection elapsed 4 ms
Wating for 600s
Without Pooling, first connection elapsed 7 ms
Without Pooling, average connection elapsed 4 ms
从这个测试结果看,关闭连接池后,平均每次连接大概要耗时4个毫秒左右,这个就是建立物理连接的平均耗时。
下面再看默认情况下的测试代码
代码如下 | 复制代码 |
public static void OpenWithPooling() sw.Start(); sw.Stop(); sw.Reset(); sw.Start(); for (int i = 0; i
{ sw.Stop();
Test.SqlConnectionTest.OpenWithPooling(); With Pooling, first connection elapsed 119 ms |
这个测试结果看,第一次耗时是119ms,这是因为我在测试代码中,首先运行的是这个测试过程,119 ms 是程序第一次启动时的首次连接耗时,这个耗时可能不光包括连接的时间,还有 ado.net 自己初始化的用时,所以这个用时可以不管。10秒以后在执行这个测试过程,首次执行的时间变成了0ms,这说明连接池机制发生了作用,SqlConnection Close 后,物理连接并没有被关闭,所以10秒后再执行,连接几乎没有用时间。
但我们发现一个有趣的现象,10分钟后,首次连接时间变成了6ms,这个和前面不打开连接池的测试用时几乎一样,也就是说10分钟后,物理连接被关闭了,又重新打开了一个物理连接。这个现象是因为连接池有个超时时间,默认情况下应该在5-10分钟之间,如果在此期间没有任何的连接操作,物理连接就会被关闭。那么我们有没有办法始终保持物理连接呢?方法是有的。
连接池设置中有一个最小连接池大小,默认为0,我们把它设置为大于0的值就可以保持若干物理连接始终不释放了。看代码
代码如下 | 复制代码 |
public static void OpenWithPooling(int minPoolSize) Stopwatch sw = new Stopwatch(); sw.Start(); sw.Stop(); sw.Reset(); sw.Start(); for (int i = 0; i
{ sw.Stop(); |
其实只要在连接字符串中加入一个 Min Pool Size=n 就可以了。
调用代码
代码如下 | 复制代码 |
Test.SqlConnectionTest.OpenWithPooling(1); With Pooling Min Pool Size=1, first connection elapsed 5 ms |
我们可以看到当 Min Pool Size = 1 时,除了首次连接用时5ms以外,即便过了10分钟,用时还是0ms,物理连接没有被关闭。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











데이터베이스 액세스 성능을 향상시키기 위한 php-fpm 연결 풀 사용 개요: 웹 개발에서 데이터베이스 액세스는 가장 빈번하고 시간이 많이 걸리는 작업 중 하나입니다. 전통적인 방법은 각 데이터베이스 작업에 대해 새 데이터베이스 연결을 생성한 다음 사용 후 연결을 닫는 것입니다. 이 방법을 사용하면 데이터베이스 연결이 자주 설정되고 닫혀 시스템 오버헤드가 증가합니다. 이 문제를 해결하기 위해 php-fpm 연결 풀 기술을 사용하여 데이터베이스 액세스 성능을 향상시킬 수 있습니다. 연결 풀의 원리: 연결 풀은 일정 수의 데이터베이스를 결합하는 캐싱 기술입니다.

Python 프로그램에서 MySQL 연결 풀을 올바르게 닫는 방법은 무엇입니까? Python으로 프로그램을 작성할 때 데이터베이스와 상호 작용해야 하는 경우가 종종 있습니다. MySQL 데이터베이스는 널리 사용되는 관계형 데이터베이스입니다. Python에서는 타사 라이브러리인 pymysql을 사용하여 MySQL 데이터베이스를 연결하고 운영할 수 있습니다. 데이터베이스 관련 코드를 작성할 때 매우 중요한 문제는 특히 연결 풀을 사용할 때 데이터베이스 연결을 올바르게 닫는 방법입니다. 연결 풀링은 관리입니다

Java 개발에서 네트워크 연결 누출 문제를 해결하는 방법 정보 기술의 급속한 발전으로 Java 개발에서 네트워크 연결이 점점 더 중요해지고 있습니다. 그러나 Java 개발에서 네트워크 연결 누출 문제가 점차 두드러지고 있습니다. 네트워크 연결 누출은 시스템 성능 저하, 자원 낭비, 시스템 충돌 등을 초래할 수 있습니다. 따라서 네트워크 연결 누출 문제를 해결하는 것이 중요해졌습니다. 네트워크 연결 누출이란 Java 개발 시 네트워크 연결이 올바르게 닫히지 않아 연결 자원이 해제되지 않아 시스템이 제대로 작동하지 못하는 것을 의미합니다. 솔루션 네트워크

PHP를 사용하여 MySQL 연결 풀을 설정하면 성능과 확장성을 향상시킬 수 있습니다. 단계에는 다음이 포함됩니다. 1. MySQLi 확장을 설치합니다. 2. 연결 풀 클래스를 생성합니다. 4. 연결 풀 인스턴스를 생성합니다. 연결 풀링을 통해 애플리케이션은 각 요청에 대해 새 데이터베이스 연결을 생성하는 것을 방지하여 성능을 향상시킬 수 있습니다.

ASP.NET 프로그램에서 MySQL 연결 풀을 올바르게 사용하고 최적화하는 방법은 무엇입니까? 소개: MySQL은 고성능, 안정성 및 사용 용이성을 특징으로 널리 사용되는 데이터베이스 관리 시스템입니다. ASP.NET 개발에서는 데이터 저장을 위해 MySQL 데이터베이스를 사용하는 것이 일반적인 요구 사항입니다. 데이터베이스 연결의 효율성과 성능을 향상시키기 위해서는 MySQL 연결 풀을 올바르게 사용하고 최적화해야 합니다. 이 기사에서는 ASP.NET 프로그램에서 MySQL 연결 풀을 올바르게 사용하고 최적화하는 방법을 소개합니다.

성능을 최적화하기 위해 Node.js 프로그램에서 MySQL 연결 풀을 올바르게 사용하는 방법은 무엇입니까? 인터넷 애플리케이션의 지속적인 개발로 인해 데이터베이스는 대부분의 애플리케이션의 핵심이 되었습니다. Node.js에서 MySQL은 가장 일반적으로 사용되는 관계형 데이터베이스 중 하나입니다. 그러나 동시성이 높은 상황에서는 MySQL 연결을 직접 사용하면 성능 저하가 발생합니다. 이 문제를 해결하기 위해 MySQL 연결 풀을 사용하여 성능을 최적화할 수 있습니다. 연결 풀은 설정된 연결 개체의 모음입니다. 커넥션 풀을 통해 애플리케이션

Node.js 프로그램에서 MySQL 연결 풀의 트랜잭션 성능을 올바르게 사용하고 관리하는 방법은 무엇입니까? 소개: 인터넷 기술의 지속적인 발전으로 Node.js는 매우 인기 있는 서버측 개발 언어가 되었습니다. 많은 웹 애플리케이션에서 데이터베이스의 트랜잭션 성능은 시스템의 안정성과 높은 신뢰성에 중요한 역할을 합니다. MySQL은 Node.js 프로그램에서 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 이 기사에서는 올바른 방법에 중점을 둘 것입니다.

Gin 프레임워크는 고성능, 고가용성 웹 처리 모델을 제공하도록 설계된 경량 웹 프레임워크입니다. Gin 프레임워크에서 HTTP 클라이언트와 연결 풀은 매우 중요한 구성 요소입니다. 이 기사에서는 Gin 프레임워크의 HTTP 클라이언트 및 연결 풀의 기본 구현 세부 사항을 자세히 살펴보겠습니다. 1. HTTP 클라이언트 HTTP 클라이언트는 HTTP 요청 전송을 위한 Gin 프레임워크의 핵심 구성 요소입니다. Gin 프레임워크에는 HTTP 클라이언트를 구현하는 다양한 방법이 있지만 가장 일반적으로 사용되는 두 가지 방법은 다음과 같습니다.
