我有一个类,它使用ADO.NET和LINQ来访问一台服务器上的一对数据库。 DB中的表格不广泛,因此实体对象相当轻。我当然使用经验和网络文章编写了最好的代码。例如......
http://dotnetperls.com/sqldataadapter http://www.velocityreviews.com/forums/t71781-set-maximum-pool-size-in-web-config.html http://msdn.microsoft.com/en-us/library/ms971481#adonetbest_topic5
运行我的代码的服务器只运行我的代码,并且与db主机不是同一台服务器。从我的.NET应用服务器(这是一个Windows服务,但我不想详述它,因为它现在看起来无关紧要)查看到数据库服务器的连接,连接数大约是200,但它当然应该少于那个;它应该在10左右,因为我在appSettings.config中将Max Pool Size设置为10。
有人可以查看我的连接代码并告诉我,如果我正在做一些会导致连接出现的事情吗?
这是我的LINQ DB上下文创建:
private const string ConnectionKey = "SQL2";
protected static string ConnectionString
{
get
{
return _connectionString = (_connectionString == null) ? ConfigurationManager.ConnectionStrings[ConnectionKey].ConnectionString : _connectionString;
}
}
private static string _connectionString = null;
protected static PricingDBDataContext ContextDB
{
get
{
if (_context == null)
{
_context = new PricingDBDataContext(ConnectionString);
}
return _context;
}
}
private static PricingDBDataContext _context = null;
这是ADO.NET方面的事情:
protected DataSet GetDataSet(bool isSproc, string cmdStr, params object[] args)
{
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
using (SqlCommand cmd = new SqlCommand(cmdStr, conn))
{
cmd.CommandType = isSproc ? CommandType.StoredProcedure : CommandType.Text;
for (int index = 0; index < args.Length; index += 2)
cmd.Parameters.AddWithValue(args[index].ToString(), args[index + 1]);
conn.Open();
DataSet set = FillSet(cmd);
conn.Close();
return set;
}
}
}
private DataSet FillSet(SqlCommand cmd)
{
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet set = new DataSet();
adapter.Fill(set);
return set;
}
谢谢,
太
答案 0 :(得分:2)
作为一般规则,如果您正在使用连接池进行任何显式操作,那么您可能做错了。自.Net
早期以来,默认设置对我很有帮助以下是需要注意的一些事项:
IDisposable
,应该明确地或在using
块中处理。这包括连接,命令,数据集和数据读取器IDisposable
,应该处理