我正在开发一个将以24/7的速度运行的应用程序。应用程序的生命周期非常简单。每当有新请求出现时,它只会更新数据库中的记录。aplicaiton更新记录在不同的服务器和不同的数据库中。一个小时内有数百万的请求应用程序对于每个请求,它都按照以下代码打开和关闭连接。
internal int ExecuteNonQuery(string Query)
{
using (SqlConnection SqlConn = new SqlConnection(this.ConnectionString))
{
using (SqlCommand sqlComm = new SqlCommand(Query, SqlConn))
{
SqlConn.Open();
sqlComm.CommandTimeout = 60;
sqlComm.ExecuteNonQuery();
return 0;
}
}
}
我想优化我的代码我不希望每次请求都将为此创建一个新的连接,我已经在ado.net中阅读了连接池机制。请记住,我有不同的sql连接(最大10)。我可以使用连接池吗?还是可以使自己的逻辑为每个连接创建sqlconection并整天打开它们。而且我的应用程序经常会产生握手异常。
[here中有很多启用连接池的方法
例如,如果您将MsSQl与OleDb驱动程序配合使用,则连接池即开即用。
根据您的情况,您可以修改池中的“最大数目”连接。要确定此号码,请在此处检查以下答案:Should I set max pool size in database connection string? What happens if I don't?
重要的是,连接不会被破坏,它们只是返回到池中。这使它非常有效,并且是推荐的操作方法。
OleDb
用于OLE DB的.NET Framework数据提供程序自动使用OLE DB会话缓冲池来缓冲连接。连接字符串参数可用于启用或禁用OLE DB服务(包括池)。
ODBC
ODBC的.NET Framework数据提供程序的连接池由用于连接的ODBC驱动程序管理器管理,不受ODBC的.NET Framework数据提供程序的影响。
OracleClientOracle的.NET Framework数据提供程序自动为ADO.NET客户端应用程序提供连接池。您还可以提供多个连接字符串修饰符来控制连接池的行为(请参阅本主题后面的“使用连接字符串关键字控制连接池”)。