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,物理连接没有被关闭。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Gambaran keseluruhan penggunaan kumpulan sambungan php-fpm untuk meningkatkan prestasi capaian pangkalan data: Dalam pembangunan web, capaian pangkalan data ialah salah satu operasi yang paling kerap dan memakan masa. Kaedah tradisional adalah untuk mencipta sambungan pangkalan data baharu untuk setiap operasi pangkalan data dan kemudian menutup sambungan selepas digunakan. Kaedah ini akan menyebabkan penubuhan dan penutupan sambungan pangkalan data yang kerap, meningkatkan overhed sistem. Untuk menyelesaikan masalah ini, anda boleh menggunakan teknologi kolam sambungan php-fpm untuk meningkatkan prestasi capaian pangkalan data. Prinsip kumpulan sambungan: Kolam sambungan ialah teknologi caching yang menggabungkan beberapa pangkalan data tertentu

Bagaimana untuk menutup kolam sambungan MySQL dengan betul dalam program Python? Apabila menulis program dalam Python, kita sering perlu berinteraksi dengan pangkalan data. Pangkalan data MySQL ialah pangkalan data hubungan yang digunakan secara meluas Dalam Python, kita boleh menggunakan pymysql perpustakaan pihak ketiga untuk menyambung dan mengendalikan pangkalan data MySQL. Apabila kami menulis kod berkaitan pangkalan data, isu yang sangat penting ialah cara menutup sambungan pangkalan data dengan betul, terutamanya apabila menggunakan kumpulan sambungan. Pengumpulan sambungan adalah pengurusan

Bagaimana untuk menyelesaikan masalah kebocoran sambungan rangkaian dalam pembangunan Java Dengan perkembangan pesat teknologi maklumat, sambungan rangkaian menjadi semakin penting dalam pembangunan Java. Walau bagaimanapun, masalah kebocoran sambungan rangkaian dalam pembangunan Java secara beransur-ansur menjadi ketara. Kebocoran sambungan rangkaian boleh menyebabkan kemerosotan prestasi sistem, pembaziran sumber, ranap sistem, dll. Oleh itu, menyelesaikan masalah kebocoran sambungan rangkaian telah menjadi penting. Kebocoran sambungan rangkaian bermakna sambungan rangkaian tidak ditutup dengan betul dalam pembangunan Java, mengakibatkan kegagalan sumber sambungan dikeluarkan, sekali gus menghalang sistem daripada berfungsi dengan baik. rangkaian penyelesaian

Menyediakan kumpulan sambungan MySQL menggunakan PHP boleh meningkatkan prestasi dan kebolehskalaan. Langkah-langkahnya termasuk: 1. Pasang sambungan MySQLi 2. Buat kelas kumpulan sambungan 3. Tetapkan konfigurasi kumpulan sambungan 5. Dapatkan dan lepaskan sambungan; Dengan pengumpulan sambungan, aplikasi boleh meningkatkan prestasi dengan mengelak daripada membuat sambungan pangkalan data baharu untuk setiap permintaan.

Bagaimana untuk menggunakan dan mengoptimumkan kolam sambungan MySQL dengan betul dalam program ASP.NET? Pengenalan: MySQL ialah sistem pengurusan pangkalan data yang digunakan secara meluas yang menampilkan prestasi tinggi, kebolehpercayaan dan kemudahan penggunaan. Dalam pembangunan ASP.NET, menggunakan pangkalan data MySQL untuk penyimpanan data adalah keperluan biasa. Untuk meningkatkan kecekapan dan prestasi sambungan pangkalan data, kami perlu menggunakan dan mengoptimumkan kumpulan sambungan MySQL dengan betul. Artikel ini akan memperkenalkan cara menggunakan dan mengoptimumkan kumpulan sambungan MySQL dengan betul dalam program ASP.NET.

Bagaimana cara menggunakan kumpulan sambungan MySQL dengan betul dalam program Node.js untuk mengoptimumkan prestasi? Dengan pembangunan berterusan aplikasi Internet, pangkalan data telah menjadi teras kepada kebanyakan aplikasi. Dalam Node.js, MySQL ialah salah satu pangkalan data hubungan yang paling biasa digunakan. Walau bagaimanapun, dalam situasi konkurensi yang tinggi, menggunakan sambungan MySQL secara langsung akan menyebabkan kemerosotan prestasi. Untuk menyelesaikan masalah ini, kami boleh menggunakan kumpulan sambungan MySQL untuk mengoptimumkan prestasi. Kolam sambungan ialah koleksi objek sambungan yang telah ditetapkan. Melalui kolam sambungan, aplikasi

Bagaimana untuk menggunakan dan mengurus prestasi transaksi kumpulan sambungan MySQL dengan betul dalam program Node.js? Pengenalan: Dengan pembangunan berterusan teknologi Internet, Node.js telah menjadi bahasa pembangunan bahagian pelayan yang sangat popular. Dalam kebanyakan aplikasi Web, prestasi transaksi pangkalan data memainkan peranan penting dalam kestabilan dan kebolehpercayaan sistem yang tinggi. MySQL ialah sistem pengurusan pangkalan data hubungan sumber terbuka yang digunakan secara meluas dalam program Node.js. Artikel ini akan memberi tumpuan kepada cara yang betul

Rangka kerja Gin ialah rangka kerja web ringan yang direka bentuk untuk menyediakan model pemprosesan web berprestasi tinggi dan ketersediaan tinggi. Dalam rangka kerja Gin, klien HTTP dan kumpulan sambungan adalah komponen yang sangat penting. Artikel ini akan menyelidiki butiran pelaksanaan asas klien HTTP dan kumpulan sambungan dalam rangka kerja Gin. 1. Pelanggan HTTP Pelanggan HTTP ialah komponen teras dalam rangka kerja Gin untuk menghantar permintaan HTTP. Dalam rangka kerja Gin, terdapat banyak cara yang berbeza untuk melaksanakan klien HTTP, tetapi dua cara yang paling biasa digunakan ialah
