C# C“如何”;核实;新连接实际上是从连接池中重新使用的
我有一个简单的c#代码,在其中我尝试多次打开和关闭连接。我如何确保我的新连接来自连接池,并且不会影响数据库C# C“如何”;核实;新连接实际上是从连接池中重新使用的,c#,database,connection,odbc,pooling,C#,Database,Connection,Odbc,Pooling,我有一个简单的c#代码,在其中我尝试多次打开和关闭连接。我如何确保我的新连接来自连接池,并且不会影响数据库 using System; using System.Data; using System.Data.Odbc; using System.Collections.Generic; namespace LBSService { class MyClass { public static OdbcConnection connection = null;
using System;
using System.Data;
using System.Data.Odbc;
using System.Collections.Generic;
namespace LBSService
{
class MyClass {
public static OdbcConnection connection = null;
public void TestConnection()
{
string connectionstring = @"Dsn=my_database.IServer;Host=IServer;
Database=my_database;Uid=informix;
Pwd=Some@123";
for (int i = 1; i <= 50; i++)
{
string StrQuery = "select * from capture_files";
connection = new OdbcConnection(connectionstring);
connection.Open();
connection.Close();
}
}
}
}
使用系统;
使用系统数据;
使用System.Data.Odbc;
使用System.Collections.Generic;
名称空间LBSService
{
类MyClass{
公共静态OdbcConnection=null;
公共void TestConnection()
{
字符串连接字符串=@“Dsn=my_database.IServer;Host=IServer;
数据库=我的数据库;Uid=informix;
Pwd=Some@123";
对于(int i=1;i您可以在函数中使用计时来添加和删除连接字符串,如下所示:
Pooling=false;
如果计时不同,则在没有此字符串的情况下,将重用连接
像这样:
public long TestConnection(bool usepooling)
{
string connectionstring = @"Dsn=my_database.IServer;Host=IServer;
Database=my_database;Uid=informix;
Pwd=Some@123;Pooling="+usepooling.ToString;
Stopwatch sw = new Stopwatch();
for (int i = 1; i <= 50; i++)
{
string StrQuery = "select * from capture_files";
connection = new OdbcConnection(connectionstring);
sw.Start();
connection.Open();
connection.Close();
sw.Stop();
}
return sw.ElapsedMilliseconds;
}
公共长测试连接(bool-usepooling)
{
字符串连接字符串=@“Dsn=my_database.IServer;Host=IServer;
数据库=我的数据库;Uid=informix;
Pwd=Some@123;Pooling=“+usepooling.ToString;
秒表sw=新秒表();
对于(int i=1;i
“我如何确保我的新连接来自连接
并且它没有命中数据库“
这是一个稍有错误的逻辑。连接池位于客户端。即使重新使用池中的连接,任何命令仍必须命中数据库
如果您拥有完全相同的连接字符串(甚至是大小写),那么您将重用池中的连接(前提是它已打开,这是默认设置)
连接池存在的原因是建立连接需要一些开销
:
连接到数据库服务器通常由几个部分组成
耗时的步骤。物理通道,如套接字或命名
必须建立管道,必须与服务器进行初始握手
发生时,必须解析连接字符串信息
连接必须由服务器进行身份验证,必须对
在当前事务中登记,依此类推
实际上,大多数应用程序只使用一种或几种不同的方法
连接的配置。这意味着在应用程序
执行时,许多相同的连接将被重复打开和关闭
关闭。为了最小化打开连接的成本,ADO.NET使用
称为连接池的优化技术
连接池减少了创建新连接的次数
必须打开。池程序保留物理池的所有权
连接。它通过保持一组活动连接处于活动状态来管理连接
每个给定连接配置的连接。每当用户
调用打开连接时,池处理程序将查找可用的
池中的连接。如果池连接可用,则
将其返回给调用方,而不是打开新连接
应用程序在连接上调用Close,池程序将其返回给
活动连接的池集,而不是关闭它
连接返回到池中,即可在
下一个开放电话
只有具有相同配置的连接才能被池化。ADO.NET
同时保留多个池,每个配置一个池。
连接通过连接字符串和
使用集成安全性时的Windows标识。连接为
也基于他们是否在事务中登记而合并
您可以查看ADO.net以确保只有一个活动的数据库连接