热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VS.NET(C#)提升-2.16_数据库接口:SqlServer数据库连接数及连接池案例分析

连接字符串中,有Pooling关键字,默认情况下其值为true,即支持连接池技术。如果不想支持连接池技术,可以显式地将其赋值为false。另外MaxPoolSize,MinPoo

连接字符串中,有Pooling关键字,默认情况下其值为true,即支持连接池技术。如果不想支持连接池技术,可以显式地将其赋值为false。

另外Max Pool Size, Min Pool Size为池允许的最大和最小连接数。

连接池就是一个容器,它存放了一定数量的与数据库服务器的物理连接。因此,当我们需要连接数据库服务器的时候,只需去池(容器)中取出一条空闲的连接,而不是新建一条连接。

比如:对Connection调用Close或Dispose时,连接被释放回池中,而跟数据库的物理连接并没有断掉。连接池一旦创建,直到活动进程终止时才会被毁坏。 所以sqlConnection.Closle()和sqlConnection.Dispose()并不会关掉数据库的物理连接。

连接池标识

    连接池是由进程、应用程序域、连接字符串以及windows标识(在使用集成的安全性时)共同组成签名来标识区分的。但对于同一应用程序域来说,一般只由连接字符串来标识区分。

    当打开一条连接时,如果该条连接的类型签名与现有的连接池类型不匹配,则创建一个新的连接池。反之,则不创建新的连接池。

    举例说明,如下:

//构造连接字符串
SqlConnectionStringBuilder cOnnStr= new SqlConnectionStringBuilder();
connStr.DataSource = "192.168.1.20";
connStr.InitialCatalog = "rzerp_zjsy";
connStr.UserID = "developer";
connStr.Password = "developer";
//创建连接对象1
using (SqlConnection conn1 = new SqlConnection(connStr.ConnectionString))
{
	conn1.Open();
	if (conn1.State == ConnectionState.Open)
	{
		Console.WriteLine("\nDatabase is linked.");
		Console.WriteLine("\nDataSource:{0}", conn1.DataSource);
		Console.WriteLine("\nDatabase:{0}", conn1.Database);
	}
}
//创建连接对象2
connStr.InitialCatalog = "master";
using (SqlConnection conn2 = new SqlConnection(connStr.ConnectionString))
{
	conn2.Open();
	if (conn2.State == ConnectionState.Open)
	{
		Console.WriteLine("\nDatabase is linked.");
		Console.WriteLine("\nDataSource:{0}", conn2.DataSource);
		Console.WriteLine("\nDatabase:{0}", conn2.Database);
	}
}
//创建连接对象3
connStr.InitialCatalog = "rzerp_zjsy";
using (SqlConnection conn3 = new SqlConnection(connStr.ConnectionString))
{
	conn3.Open();
	if (conn3.State == ConnectionState.Open)
	{
		Console.WriteLine("\nDatabase is linked.");
		Console.WriteLine("\nDataSource:{0}", conn3.DataSource);
		Console.WriteLine("\nDatabase:{0}", conn3.Database);
	}
}

SQL Server端连接数与客户端连接池关系

1,准备

    SQL Server 服务端的并发连接数可以设置:如下所示:
    exec sp_configure 'user option' ,0

    reconfigure

查看数据库设置的最大连接数,run_value=0(为0默认最大值32767)


2,客户端测试程式,其代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace connPools
{
    class Program
    {
        static void Main(string[] args)
        {
            int maxCount = 40000; 
            //构建连接字符串
            SqlConnectionStringBuilder cOnnStr= new SqlConnectionStringBuilder();
            connStr.DataSource = "192.168.1.20";
            connStr.InitialCatalog = "rzerp_zjsy";
            connStr.UserID = "developer";
            connStr.Password = "developer";
            connStr.Pooling = true;
            connStr.MaxPoolSize = 40000;
            connStr.MinPoolSize = 1;
            connStr.COnnectTimeout= 15;
            string cOnnstring= connStr.ConnectionString;
            List collection = new List();
            for (int i = 0; i  
 

为了验证关系,我们配置个测试用例,设置max poolsize = 100,即连接池100,数据库3000 (语法:exce SP_)



查询客户端连接到数据库的信息:

SELECT [program_name] ,[spid] FROM [sys].[sysprocesses] WHERE[spid]>50


用例安排:

测试用例一:设置max poolsize=40000,即连接池40000,数据库32767
测试用例二:设置max poolsize=3000,即连接池3000,数据库32767

测试用例三:设置max poolsize=40000,即连接池40000,数据库3000

观察结果如下:



推荐阅读
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 设计模式系列-原型模式
    一、上篇回顾上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每个组成部分的详细创建步骤可以是动态的变化的,但 ... [详细]
  • 本文探讨了在Node.js环境中如何有效地捕获标准输出(stdout)的内容,并将其存储到变量中。通过具体的示例和解决方案,帮助开发者解决常见的输出捕获问题。 ... [详细]
  • HTTP中的Chunked编码与Content-Length的区别及应用场景
    本文探讨了在HTTP协议中,当使用Transfer-Encoding为chunked时为何无需设置Content-Length,以及这种编码方式的具体实现和优势。 ... [详细]
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
  • 拖拉切割直线 ... [详细]
  • 抽象工厂模式 c++
    抽象工厂模式包含如下角色:AbstractFactory:抽象工厂ConcreteFactory:具体工厂AbstractProduct:抽象产品Product:具体产品https ... [详细]
  • 本文深入探讨了JLine库中的ConsoleReader.drawBuffer()方法的使用场景和具体实现,通过多个实际代码示例,帮助开发者更好地理解和应用此方法。 ... [详细]
  • 本文探讨了SQLAlchemy ORM框架中如何利用外键和关系(relationship)来建立表间联系,简化复杂的查询操作。通过示例代码详细解释了relationship的定义、使用方法及其与外键的相互作用。 ... [详细]
  • 深入解析Android Activity生命周期
    本文详细探讨了Android中Activity的生命周期,通过实例代码和详细的步骤说明,帮助开发者更好地理解和掌握Activity各个阶段的行为。 ... [详细]
  • 字符、字符串和文本的处理之Char类型
    .NetFramework中处理字符和字符串的主要有以下这么几个类:(1)、System.Char类一基础字符串处理类(2)、System.String类一处理不可变的字符串(一经 ... [详细]
  • Navicat Premium中MySQL用户管理:创建新用户及高级设置
    本文作为Navicat Premium用户管理系列的第二部分,主要介绍如何创建新的MySQL用户,包括设置基本账户信息、密码策略、账户限制以及SSL配置等。 ... [详细]
  • 帝国cms各数据表有什么用
    CMS教程|帝国CMS帝国cmsCMS教程-帝国CMS精易编程助手源码,ubuntu桥接设置,500错误是tomcat吗,爬虫c原理,php会话包括什么,营销seo关键词优化一般多 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
author-avatar
淡月如水夜宿雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有